Compare commits

..

129 Commits

Author SHA1 Message Date
Pieter Hintjens
8b9a82476b Merge pull request #37 from hintjens/master
Fixed test_many_sockets
2013-11-24 09:58:59 -08:00
Pieter Hintjens
4363b75b4d Release notes for 4.0.3 2013-11-24 18:56:50 +01:00
Pieter Hintjens
c022c048dc Fixed test_many_sockets
* failed on systems where process could not allocate 1024 sockets by default
* include path for platform.hpp was wrong; fixed it
2013-11-24 18:55:28 +01:00
Pieter Hintjens
78b741bd71 Merge pull request #36 from hintjens/master
Updated version number for 4.0.2
2013-11-24 03:47:58 -08:00
Pieter Hintjens
ba7c065c3d Updated version number for 4.0.2
- also moved macros to top of zmq.h for better visibility
2013-11-24 12:45:47 +01:00
Pieter Hintjens
d743ddafda Merge pull request #35 from hintjens/master
Updated NEWS for release 4.0.2
2013-11-24 03:42:01 -08:00
Pieter Hintjens
84c0caf42e Updated NEWS for release 4.0.2 2013-11-24 12:41:20 +01:00
Pieter Hintjens
e1939155ff Merge pull request #34 from hintjens/master
Backporting fixes from master
2013-11-19 02:01:23 -08:00
Pieter Hintjens
9ece2d322a Added links to RFCs for socket patterns 2013-11-19 11:00:45 +01:00
KIU Shueng Chuan
589bf436dd remove all asserts during critical section
the size of the critical section is reduced by only entering the critical
section right before the bind().
2013-11-19 11:00:39 +01:00
KIU Shueng Chuan
e54e55835e return error to caller on bind error 2013-11-19 11:00:28 +01:00
Richard Newton
111c20dc22 Fix signed/unsigned comparison 2013-11-19 11:00:07 +01:00
Richard Newton
3a4896f4a3 Fix signed/unsigned comparison 2013-11-19 10:59:57 +01:00
Richard Newton
0855c28069 Reduce default maximum number of sockets by 1 so there is room for the reaper socket. 2013-11-19 10:58:34 +01:00
Richard Newton
737b6afc97 Revert "Make FD_SETSIZE = ZMQ_MAX_SOCKETS_DFLT + 1 so there is room for the repear socket."
This reverts commit 0b92831b2a82c3bbc0e9371662c546b94915a3ea.
2013-11-19 10:58:28 +01:00
psl-felipefarinon
8f85bafe37 issue #583 removing C++11 code. 2013-11-19 10:58:20 +01:00
Bruno D. Rodrigues
f72dbb35d5 Fix socket creation above sistem limits for all 'other' OS not covered by eventfd, windows or vms; enhanced test to create sockets up to a bigger limit to really test hitting the OS limit 2013-11-19 10:55:48 +01:00
Pieter Hintjens
5d6e7a74c1 Added test case to ignore 2013-11-09 09:59:21 +01:00
Pieter Hintjens
30309d660e Merge pull request #32 from hintjens/master
Cherry picking changes from libzmq master
2013-11-09 00:56:52 -08:00
Pieter Hintjens
e0c8a112a4 Cherry picking fixes from master 2013-11-09 09:56:21 +01:00
Martin Hurton
f6293d257d Signal that the peer performed orderly shutdown 2013-11-09 09:52:09 +01:00
Richard Newton
f33bdcf02e Fix formatting. 2013-11-09 09:52:08 +01:00
Richard Newton
fef24a8c1f Make FD_SETSIZE = ZMQ_MAX_SOCKETS_DFLT + 1 so there is room for the repear socket. 2013-11-09 09:52:05 +01:00
Richard Newton
bfc3deb43a Get maximum number of sockets it can handle from poller_t 2013-11-09 09:52:02 +01:00
psl-felipefarinon
dccf1dce1e Fixing broken build issue #583 2013-11-09 09:51:59 +01:00
Richard Newton
24311dee1b Add test case for many sockets
Conflicts:
	CMakeLists.txt
	tests/Makefile.am
2013-11-09 09:50:43 +01:00
psl-felipefarinon
27d20aacc7 Fixing issue #583. Using low resolution timer for clock::now_ms 2013-11-09 09:47:41 +01:00
Pieter Hintjens
b2698474d2 Simplified fdpair reset after fork 2013-11-09 09:47:40 +01:00
Pieter Hintjens
0465e9abe9 Simplified error handling for make_fdpair on Windows 2013-11-09 09:47:04 +01:00
Pieter Hintjens
885c816e57 Fix for issue 574 2013-11-09 09:47:02 +01:00
Pieter Hintjens
7f3d0995cd Removed over-long pauses in tests
- used msleep (10) in most places instead of zmq_sleep (1)
- may cause failures on slower machines
- to change, modify SETTLE_TIME in testutil.h
- tested down to 1 msec on fast boxes

Conflicts:
	tests/test_connect_delay_tipc.cpp
	tests/test_proxy.cpp
	tests/test_sub_forward_tipc.cpp
	tests/test_term_endpoint_tipc.cpp
	tests/testutil.hpp
2013-11-09 09:44:17 +01:00
Pieter Hintjens
f745e4ce64 Merge pull request #31 from hintjens/master
Backported fixes for libzmq-39 and other patches.
2013-11-06 11:26:05 -08:00
Richard Newton
de239f358e Fix race condition on shutdown 2013-11-06 20:16:03 +01:00
Richard Newton
30f470eff5 Fix test warning. 2013-11-06 20:16:03 +01:00
Richard Newton
f0b69bba28 Fix test warning. 2013-11-06 20:16:03 +01:00
MinRK
60032ef330 test zmq_msg_close after sending empty message on ROUTER_RAW 2013-11-06 20:16:03 +01:00
MinRK
c663f37761 add missing msg->init for ROUTER_RAW with empty message 2013-11-06 20:16:03 +01:00
Pieter Hintjens
806f57e7f6 Merge pull request #30 from hintjens/master
Cherry picking fixes from libzmq
2013-11-04 08:44:38 -08:00
Pieter Hintjens
b22c2e4f8a Updated NEWS 2013-11-04 17:37:15 +01:00
Denis Mingulov
54a3ebcac6 Doc examples with zmq_msg_close usage - parameter is 'zmq_msg_t *'
Documentation examples for zmq_msg_get and zmq_msg_more functions have an
incorrect call to zmq_msg_close function - with 'zmq_msg_t' as a parameter
despite 'zmq_msg_t *' is required, so it is impossible to compile these
examples properly.

Also for zmq_msg_get example - declaration of zmq_msg_t variable is added
(like it is done in other examples).
2013-11-04 17:35:47 +01:00
Pieter Hintjens
aede37e3e5 Fixed issue 578 - corrected type usage 2013-11-04 17:34:54 +01:00
Pieter Hintjens
2949f2dbc5 Fixed issue 578 2013-11-04 17:34:14 +01:00
Pieter Hintjens
28b7c991af Merge pull request #28 from hintjens/master
Fixed configure error on non-Linux boxes
2013-10-28 03:58:52 -07:00
Pieter Hintjens
1c70e91c6f Fixed configure error on non-Linux boxes 2013-10-28 11:58:29 +01:00
Pieter Hintjens
c85fbaf22e Merge pull request #27 from hintjens/master
Fixed ref to zmq_socket_monitor
2013-10-28 03:49:45 -07:00
Pieter Hintjens
b58055794b Fixed ref to zmq_socket_monitor 2013-10-28 11:49:23 +01:00
Pieter Hintjens
cb3c82271a Merge pull request #26 from hintjens/master
Backporting fixes from master
2013-10-25 01:04:06 -07:00
Pieter Hintjens
9bf10a83a1 Updated NEWS 2013-10-25 10:03:42 +02:00
Pieter Hintjens
8efd7affc6 test_stream failed when response was broken into frames 2013-10-25 09:56:04 +02:00
Pieter Hintjens
bf97ea8ed8 Merge pull request #25 from hintjens/master
Clarified use of secret/public keys
2013-10-23 07:04:20 -07:00
Pieter Hintjens
cd2afebd0a Clarified use of secret/public keys 2013-10-23 16:03:45 +02:00
Pieter Hintjens
2b8d86c24a Merge pull request #24 from hintjens/master
Fixed man page for CURVE key options
2013-10-23 03:05:44 -07:00
Pieter Hintjens
bd411bbf11 Fixed man page for CURVE key options 2013-10-23 12:04:57 +02:00
Pieter Hintjens
573d7b0c0b Merge pull request #23 from hintjens/master
Backporting LIBZMQ-569 fix from master
2013-10-13 23:05:54 -07:00
Pieter Hintjens
dcb9312ba6 Updated NEWS for backport 2013-10-14 08:04:57 +02:00
Martin Hurton
5490794666 Load identity message to decoder at start 2013-10-14 08:03:36 +02:00
Pieter Hintjens
07d7cf69d0 Merge pull request #22 from hintjens/master
Temporary workaround for broken libsodium install
2013-10-13 05:47:11 -07:00
Pieter Hintjens
b24db36057 Temporary workaround for broken libsodium install 2013-10-13 14:46:08 +02:00
Pieter Hintjens
4f2ac39d28 Merge pull request #21 from hintjens/master
Backporting fixes from master
2013-10-11 03:12:27 -07:00
Pieter Hintjens
a32c02ae47 Identity can only be set on sockets that can connect to ROUTER 2013-10-11 11:47:33 +02:00
Martin Hurton
622e3b5476 Rename engine's methods to improve code readability 2013-10-11 11:47:12 +02:00
xantares
6c036b39ae Fixed out-of-source build 2013-10-11 11:46:50 +02:00
Pieter Hintjens
8cdff6fa2e Fixed NEWS 2013-10-08 17:54:41 +02:00
Pieter Hintjens
f8cebb460a Revert "replace macro constants with enum types for user facing constants"
This reverts commit 4fb74539250d83e82e40e85d39e2e756eccdb8a3.
2013-10-08 15:02:58 +02:00
Pieter Hintjens
d62e7a0734 Revert "distinguish between options and defaults"
This reverts commit e7db680f5b709ce821f79b1e8956f4cbd1931c11.
2013-10-08 15:02:47 +02:00
Pieter Hintjens
a44bd65d03 Fixed NEWS for 4.0.1 release 2013-10-08 10:46:47 +02:00
Pieter Hintjens
437e4070a3 Merge pull request #19 from hintjens/master
Updated NEWS for 4.0.1
2013-10-08 01:36:58 -07:00
Pieter Hintjens
0bfcd4da2f Updated NEWS for 4.0.1 2013-10-08 10:33:50 +02:00
Pieter Hintjens
c852620f5f Merge pull request #18 from hintjens/master
Cherry picking changes from libzmq master
2013-10-08 00:20:40 -07:00
Volodymyr Korniichuk
ca122e9d01 Typo in type name "emTPy_slots_t"
https://zeromq.jira.com/browse/LIBZMQ-565
2013-10-08 09:20:15 +02:00
Dylan Cali
e7db680f5b distinguish between options and defaults 2013-10-08 09:19:55 +02:00
Dylan Cali
4fb7453925 replace macro constants with enum types for user facing constants 2013-10-08 09:19:49 +02:00
Brandon Carpenter
813166019e Add tests/test_abstract_ipc to .gitignore. 2013-10-07 20:53:20 +02:00
Brandon Carpenter
127cd7585a Fix detection of abstract ipc pathname and length calculation.
Abstract socket pathnames must have a NULL character in the first
position, but the second character must also be checked to differentiate
an abstract name from the empty string.  The address length must also
indicate the length of the pathname because the kernel uses the entire
address as the name, including NULL characters.  ZMQ uses
NULL-terminated strings for the address, so the abstract address length
is the length of the string following the initial NULL byte plus 3; two
bytes for the address family and one for the initial NULL character.
2013-10-07 20:53:10 +02:00
Brandon Carpenter
0666152b21 Add note on Linux abstract namespace to ipc documentation. 2013-10-07 20:53:00 +02:00
Volodymyr Korniichuk
9293153f71 useless checks were removed 2013-10-05 09:22:56 +02:00
Pieter Hintjens
163aebbacf Merge pull request #17 from hintjens/master
Cherry picking changes from libzmq master
2013-10-05 00:20:49 -07:00
Brandon Carpenter
80d657a2c5 Add test for abstract namespace support in ipc sockets on Linux.
See issue 567.
2013-10-05 09:20:20 +02:00
Brandon Carpenter
668f000cb1 Add abstract namespace support for IPC sockets on Linux.
Converts an initial strudel or "at sign" (@) in the Unix socket path to
a NULL character ('\0') indicating that the socket uses the abstract
namespace instead of the filesystem namespace.  For instance, binding a
socket to 'ipc://@/tmp/tester' will not create a file associated with
the socket whereas binding to 'ipc:///tmp/tester' will create the file
/tmp/tester.  See issue 567 for more information.
2013-10-05 09:20:13 +02:00
KIU Shueng Chuan
a570b18931 WinSock2.h filename should be all lowercase 2013-10-05 09:20:06 +02:00
KIU Shueng Chuan
5493d4d180 test for _MSC_VER before using MSVC specific code 2013-10-05 09:19:58 +02:00
Pieter Hintjens
b20573c841 Merge pull request #16 from hintjens/master
Cherry picking changes from libzmq master
2013-10-04 00:19:57 -07:00
Martin Hurton
814b93e0cf Stop curve handshake when cookie box verification fails 2013-10-04 09:19:11 +02:00
Pieter Hintjens
d723b08c13 Updated libzmq CURVE to track RFC 27
* The INITIATE command vouch box is Box[C',S](C->S') instead of Box[C'](C->S),
  as recommended by https://codesinchaos.wordpress.com/2012/09/09/curvecp-1/,
  to reduce the risk of client impersonation.

* Mirrors the change in libcurve and CurveZMQ specifications.
2013-10-04 09:19:04 +02:00
Matt Connolly
62fd6fa861 git ignore test run output files: tests/test*.{log|trs} 2013-10-04 09:17:34 +02:00
Pieter Hintjens
a78ccf293f Disabled randomly failing part of test 2013-10-04 09:13:35 +02:00
Pieter Hintjens
d82ba6bd53 Clarified that zmq.h constants are part of the public contract 2013-10-04 09:13:17 +02:00
Dylan Cali
9da52ddf59 fix minor typo in zmq_ctx_get doc example 2013-10-04 09:13:11 +02:00
Pieter Hintjens
a69fa9ecde Packaging for zmq_curve_keypair function
* Added new man page for this
* Added test case, in tests/test_security_curve.cpp
* Noted in zmq_utils.h that these methods are documented
2013-10-04 09:13:05 +02:00
MinRK
facb96ffca use zmq_curve_keypair in curve_keygen 2013-10-04 09:12:56 +02:00
MinRK
3c469d04c1 return NULL and set EINVAL on bad z85 input
asserts aren't appropriate for checking user input.
2013-10-04 09:12:33 +02:00
MinRK
870233522c add zmq_curve_keypair to zmq_utils 2013-10-04 09:12:09 +02:00
Pieter Hintjens
34471cd591 Merge pull request #12 from hintjens/master
Backporting fixes from master
2013-09-29 08:04:10 -07:00
Pieter Hintjens
453ceb65b4 Fixed merge conflict error 2013-09-29 17:03:44 +02:00
Matt Connolly
4d82544c34 config for libsodium in alternate path, using CPP flags for both C and C++ sources. 2013-09-29 17:01:15 +02:00
MinRK
bd6bca7c82 include missing platform.hpp in curve_keygen
it was excluded, so HAVE_SODIUM would never be defined,
leading to curve_keygen always reporting "recompile with libsodium"
2013-09-29 17:01:00 +02:00
MinRK
087ddac593 declare z85_encode / decode in zmq_utils
they are used by curve_keygen, but not available
2013-09-29 17:00:22 +02:00
Matt Connolly
d1b686b644 Disable compiler warning for Solaris 2013-09-27 13:39:10 +02:00
Matt Connolly
4dc36c0dba Add '-lssp' linker flag for Solaris. Check for libraries after host specific setup. 2013-09-27 13:38:55 +02:00
Pieter Hintjens
17d12a6be1 Merge pull request #9 from hintjens/master
Cherry picking changes from libzmq master
2013-09-26 05:48:49 -07:00
Pieter Hintjens
89b97cbe59 Updated CMake project for test_issue_566 2013-09-26 14:46:49 +02:00
Pieter Hintjens
b0059211d5 Added test case for issue 566
* Tests dealer-to-router connection 100 times
* This was failing in ZMQ v4.0.0 RC1
2013-09-26 14:46:35 +02:00
Pieter Hintjens
cd452d5019 Merge pull request #8 from hintjens/master
Backporting fixes from master
2013-09-26 03:32:10 -07:00
Pieter Hintjens
dd185e13bf Bumped version for 4.0.1 2013-09-26 12:31:43 +02:00
Pieter Hintjens
517601de10 curve_keygen needed assert.h 2013-09-26 12:17:36 +02:00
Pieter Hintjens
5e25b32c36 Build/test errors on OS/X with clang++ 2013-09-26 12:17:28 +02:00
Martin Hurton
a5152245bd Call flush after writing the identity message 2013-09-26 10:07:29 +02:00
Pieter Hintjens
9cbcc49a4a Merge pull request #6 from ipechorin/master
stdint.h is not available on all platforms
2013-09-24 03:32:02 -07:00
Pieter Hintjens
2d5bad96e3 Merge pull request #7 from hintjens/master
Fixed build for MSVC 2008
2013-09-24 03:31:08 -07:00
Pieter Hintjens
c99b727f6d Fixed build for MSVC 2008 2013-09-24 12:29:29 +02:00
Ivan Pechorin
8a931a7554 stdint.h is not available on all platforms 2013-09-24 14:00:08 +04:00
Pieter Hintjens
b04df2c530 Merge pull request #4 from hintjens/master
Updated library ABI version
2013-09-24 00:12:03 -07:00
Pieter Hintjens
4df7cb043e Bumped library version and age 2013-09-24 09:11:17 +02:00
Pieter Hintjens
201454e866 Move away from port 8080 which is occupied on some boxes 2013-09-20 23:17:01 +02:00
Richard Newton
ad1bae2160 Merge pull request #3 from vortechs2000/fix_aix
Revert "Reference platform.h by ../src/platform.h - AIX is ignoring -I flags"
2013-09-20 12:48:29 -07:00
AJ Lewis
77f394a681 Revert "Reference platform.h by ../src/platform.h - AIX is ignoring -I flags"
This reverts commit 1e8e4d79c885b27831e2196d94987cc2817e0f04.
2013-09-20 14:39:01 -05:00
Pieter Hintjens
61d8bf9b11 Merge pull request #2 from vortechs2000/fix_aix
Reference platform.h by ../src/platform.h - AIX is ignoring -I flags
2013-09-20 09:54:03 -07:00
AJ Lewis
1e8e4d79c8 Reference platform.h by ../src/platform.h - AIX is ignoring -I flags 2013-09-20 11:43:53 -05:00
Pieter Hintjens
c0c8ce5508 File was missing from Makefile.am 2013-09-20 16:41:08 +02:00
Pieter Hintjens
66b1bc6d7f Added link to security tutorial 2013-09-20 16:15:53 +02:00
Pieter Hintjens
f5ecc826d9 Merge pull request #1 from hintjens/master
Preparation for 4.0.0 release
2013-09-20 07:06:48 -07:00
Pieter Hintjens
a31fe9565a Source distribution was broken 2013-09-20 16:03:14 +02:00
Pieter Hintjens
2f4905500d Version number is 4.0.0 2013-09-20 16:02:55 +02:00
Pieter Hintjens
c10a3ec526 Updated NEWS for 4.0.0 2013-09-20 15:53:27 +02:00
Pieter Hintjens
e0676a2b26 Renamed new socket options to be clearer
* ZMQ_REQ_STRICT was negative option (default 1) which goes against
  the standard, where defaults are zero. I renamed this to
  ZMQ_REQ_RELAXED.

* ZMQ_REQ_REQUEST_IDS felt clumsy and describes the technical solution
  rather than the problem/requirement. I changed to ZMQ_REQ_CORRELATE
  which seems more explicit.
2013-09-20 15:50:25 +02:00
Pieter Hintjens
b411a3561d Removed inaccurate note in zmq_poll man page 2013-09-20 15:35:20 +02:00
Pieter Hintjens
4ce9b42405 Built zmq_send_const man page properly 2013-09-20 15:35:11 +02:00
Pieter Hintjens
fef4fa8fc5 Renamed test_connect_delay to test_immediate
* The ZMQ_CONNECT_DELAY option was renamed to ZMQ_IMMEDIATE
2013-09-20 15:34:55 +02:00
Pieter Hintjens
4298f71cbf Updated NEWS for 3.2.x releases 2013-09-20 13:28:25 +02:00
882 changed files with 32865 additions and 111990 deletions

View File

@ -1,53 +0,0 @@
BasedOnStyle: LLVM
IndentWidth: 4
UseTab: Never
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterControlStatement: false
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
BeforeCatch: true
BeforeElse: false
IndentBraces: false
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: true
BinPackArguments: true
BinPackParameters: false
AlignTrailingComments: true
AllowShortBlocksOnASingleLine: false
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortFunctionsOnASingleLine: InlineOnly
AlwaysBreakTemplateDeclarations: false
ColumnLimit: 80
MaxEmptyLinesToKeep: 2
KeepEmptyLinesAtTheStartOfBlocks: false
ContinuationIndentWidth: 2
PointerAlignment: Right
ReflowComments: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: Always
SpaceInEmptyParentheses: false
SpacesInAngles: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp03
SortIncludes: false
FixNamespaceComments: false
BreakBeforeBinaryOperators: NonAssignment
SpaceAfterTemplateKeyword: true
AlignAfterOpenBracket: Align
AlignOperands: true
BreakConstructorInitializers: AfterColon
ConstructorInitializerAllOnOneLineOrOnePerLine: true
SpaceAfterCStyleCast: true
BreakBeforeTernaryOperators: true

View File

@ -1,429 +0,0 @@
Checks: "*,\
# not currently a coding convention, but conceivable,\
-llvm-include-order,\
# currently the coding convention deliberately produces violations of these,\
# rules, but it may make sense to reconsider,\
-readability-implicit-bool-conversion,\
-readability-braces-around-statements,\
-readability-named-parameter,\
-fuchsia-default-arguments,\
-google-readability-todo,\
-google-runtime-int,\
-cppcoreguidelines-avoid-goto,\
-hicpp-avoid-goto, \
-cppcoreguidelines-pro-type-member-init,\
-cppcoreguidelines-pro-type-static-cast-downcast,\
-readability-identifier-naming,\
# not applicable,\
-fuchsia-default-arguments-calls,\
-fuchsia-overloaded-operator,\
-fuchsia-statically-constructed-objects,\
# not currently a coding convention, C++11-specific, but conceivable,\
-modernize-use-nullptr,\
-modernize-use-equals-default,\
-modernize-deprecated-headers,\
# not currently a coding convention, C++11-specific and hard to implement,\
-hicpp-no-malloc,\
-hicpp-avoid-c-arrays,\
-modernize-avoid-c-arrays,\
-modernize-pass-by-value,\
-modernize-loop-convert,\
-modernize-use-auto,\
-modernize-use-trailing-return-type,\
-modernize-use-using,\
-modernize-return-braced-init-list,\
-cppcoreguidelines-avoid-c-arrays,\
-cppcoreguidelines-no-malloc,\
-cppcoreguidelines-owning-memory,\
-cppcoreguidelines-pro-type-union-access,\
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,\
-cppcoreguidelines-pro-bounds-constant-array-index,\
-cppcoreguidelines-pro-bounds-pointer-arithmetic,\
# not easily possible to implement (maybe replace by specific exclusions),\
-cppcoreguidelines-pro-type-vararg,\
-cppcoreguidelines-pro-type-reinterpret-cast,\
-hicpp-signed-bitwise,\
# duplicates,\
-google-readability-braces-around-statements,\
-cppcoreguidelines-pro-type-cstyle-cast,\
-cppcoreguidelines-avoid-magic-numbers,\
-readability-magic-numbers,\
-hicpp-braces-around-statements,\
-hicpp-use-equals-default,\
-hicpp-deprecated-headers,\
-hicpp-no-assembler,\
-hicpp-vararg,\
-hicpp-use-auto,\
-hicpp-use-nullptr,\
-hicpp-no-array-decay,\
-hicpp-member-init"
WarningsAsErrors: ''
HeaderFilterRegex: ''
# AnalyzeTemporaryDtors: false
CheckOptions:
# - key: cert-dcl59-cpp.HeaderFileExtensions
# value: h,hh,hpp,hxx
# - key: cert-err61-cpp.CheckThrowTemporaries
# value: '1'
# - key: cert-oop11-cpp.IncludeStyle
# value: llvm
# - key: cert-oop11-cpp.UseCERTSemantics
# value: '1'
# - key: cppcoreguidelines-pro-bounds-constant-array-index.GslHeader
# value: ''
# - key: cppcoreguidelines-pro-bounds-constant-array-index.IncludeStyle
# value: '0'
# - key: cppcoreguidelines-pro-type-member-init.IgnoreArrays
# value: '0'
# - key: google-build-namespaces.HeaderFileExtensions
# value: h,hh,hpp,hxx
# - key: google-global-names-in-headers.HeaderFileExtensions
# value: h
# - key: google-readability-braces-around-statements.ShortStatementLines
# value: '1'
# - key: google-readability-function-size.BranchThreshold
# value: '4294967295'
# - key: google-readability-function-size.LineThreshold
# value: '4294967295'
# - key: google-readability-function-size.StatementThreshold
# value: '800'
# - key: google-readability-namespace-comments.ShortNamespaceLines
# value: '10'
# - key: google-readability-namespace-comments.SpacesBeforeComments
# value: '2'
# - key: google-runtime-int.SignedTypePrefix
# value: int
# - key: google-runtime-int.TypeSuffix
# value: ''
# - key: google-runtime-int.UnsignedTypePrefix
# value: uint
# - key: llvm-namespace-comment.ShortNamespaceLines
# value: '1'
# - key: llvm-namespace-comment.SpacesBeforeComments
# value: '1'
# - key: misc-assert-side-effect.AssertMacros
# value: assert
# - key: misc-assert-side-effect.CheckFunctionCalls
# value: '0'
# - key: misc-dangling-handle.HandleClasses
# value: 'std::basic_string_view;std::experimental::basic_string_view'
# - key: misc-definitions-in-headers.HeaderFileExtensions
# value: ',h,hh,hpp,hxx'
# - key: misc-definitions-in-headers.UseHeaderFileExtension
# value: '1'
# - key: misc-misplaced-widening-cast.CheckImplicitCasts
# value: '1'
# - key: misc-move-constructor-init.IncludeStyle
# value: llvm
# - key: misc-move-constructor-init.UseCERTSemantics
# value: '0'
# - key: misc-sizeof-expression.WarnOnSizeOfCompareToConstant
# value: '1'
# - key: misc-sizeof-expression.WarnOnSizeOfConstant
# value: '1'
# - key: misc-sizeof-expression.WarnOnSizeOfThis
# value: '1'
# - key: misc-string-constructor.LargeLengthThreshold
# value: '8388608'
# - key: misc-string-constructor.WarnOnLargeLength
# value: '1'
# - key: misc-suspicious-missing-comma.MaxConcatenatedTokens
# value: '5'
# - key: misc-suspicious-missing-comma.RatioThreshold
# value: '0.200000'
# - key: misc-suspicious-missing-comma.SizeThreshold
# value: '5'
# - key: misc-suspicious-string-compare.StringCompareLikeFunctions
# value: ''
# - key: misc-suspicious-string-compare.WarnOnImplicitComparison
# value: '1'
# - key: misc-suspicious-string-compare.WarnOnLogicalNotComparison
# value: '0'
# - key: misc-throw-by-value-catch-by-reference.CheckThrowTemporaries
# value: '1'
# - key: modernize-loop-convert.MaxCopySize
# value: '16'
# - key: modernize-loop-convert.MinConfidence
# value: reasonable
# - key: modernize-loop-convert.NamingStyle
# value: CamelCase
# - key: modernize-pass-by-value.IncludeStyle
# value: llvm
# - key: modernize-replace-auto-ptr.IncludeStyle
# value: llvm
# - key: modernize-use-nullptr.NullMacros
# value: 'NULL'
# - key: performance-faster-string-find.StringLikeClasses
# value: 'std::basic_string'
# - key: performance-for-range-copy.WarnOnAllAutoCopies
# value: '0'
# - key: readability-braces-around-statements.ShortStatementLines
# value: '1'
# - key: readability-function-size.BranchThreshold
# value: '4294967295'
# - key: readability-function-size.LineThreshold
# value: '4294967295'
# - key: readability-function-size.StatementThreshold
# value: '800'
# - key: readability-identifier-naming.AbstractClassCase
# value: aNy_CasE
# - key: readability-identifier-naming.AbstractClassPrefix
# value: ''
# - key: readability-identifier-naming.AbstractClassSuffix
# value: ''
# - key: readability-identifier-naming.ClassCase
# value: aNy_CasE
# - key: readability-identifier-naming.ClassConstantCase
# value: aNy_CasE
# - key: readability-identifier-naming.ClassConstantPrefix
# value: ''
# - key: readability-identifier-naming.ClassConstantSuffix
# value: ''
# - key: readability-identifier-naming.ClassMemberCase
# value: aNy_CasE
# - key: readability-identifier-naming.ClassMemberPrefix
# value: ''
# - key: readability-identifier-naming.ClassMemberSuffix
# value: ''
# - key: readability-identifier-naming.ClassMethodCase
# value: aNy_CasE
# - key: readability-identifier-naming.ClassMethodPrefix
# value: ''
# - key: readability-identifier-naming.ClassMethodSuffix
# value: ''
# - key: readability-identifier-naming.ClassPrefix
# value: ''
# - key: readability-identifier-naming.ClassSuffix
# value: ''
# - key: readability-identifier-naming.ConstantCase
# value: aNy_CasE
# - key: readability-identifier-naming.ConstantMemberCase
# value: aNy_CasE
# - key: readability-identifier-naming.ConstantMemberPrefix
# value: ''
# - key: readability-identifier-naming.ConstantMemberSuffix
# value: ''
# - key: readability-identifier-naming.ConstantParameterCase
# value: aNy_CasE
# - key: readability-identifier-naming.ConstantParameterPrefix
# value: ''
# - key: readability-identifier-naming.ConstantParameterSuffix
# value: ''
# - key: readability-identifier-naming.ConstantPrefix
# value: ''
# - key: readability-identifier-naming.ConstantSuffix
# value: ''
# - key: readability-identifier-naming.ConstexprFunctionCase
# value: aNy_CasE
# - key: readability-identifier-naming.ConstexprFunctionPrefix
# value: ''
# - key: readability-identifier-naming.ConstexprFunctionSuffix
# value: ''
# - key: readability-identifier-naming.ConstexprMethodCase
# value: aNy_CasE
# - key: readability-identifier-naming.ConstexprMethodPrefix
# value: ''
# - key: readability-identifier-naming.ConstexprMethodSuffix
# value: ''
# - key: readability-identifier-naming.ConstexprVariableCase
# value: aNy_CasE
# - key: readability-identifier-naming.ConstexprVariablePrefix
# value: ''
# - key: readability-identifier-naming.ConstexprVariableSuffix
# value: ''
# - key: readability-identifier-naming.EnumCase
# value: aNy_CasE
# - key: readability-identifier-naming.EnumConstantCase
# value: aNy_CasE
# - key: readability-identifier-naming.EnumConstantPrefix
# value: ''
# - key: readability-identifier-naming.EnumConstantSuffix
# value: ''
# - key: readability-identifier-naming.EnumPrefix
# value: ''
# - key: readability-identifier-naming.EnumSuffix
# value: ''
# - key: readability-identifier-naming.FunctionCase
# value: aNy_CasE
# - key: readability-identifier-naming.FunctionPrefix
# value: ''
# - key: readability-identifier-naming.FunctionSuffix
# value: ''
# - key: readability-identifier-naming.GlobalConstantCase
# value: aNy_CasE
# - key: readability-identifier-naming.GlobalConstantPrefix
# value: ''
# - key: readability-identifier-naming.GlobalConstantSuffix
# value: ''
# - key: readability-identifier-naming.GlobalFunctionCase
# value: aNy_CasE
# - key: readability-identifier-naming.GlobalFunctionPrefix
# value: ''
# - key: readability-identifier-naming.GlobalFunctionSuffix
# value: ''
# - key: readability-identifier-naming.GlobalVariableCase
# value: aNy_CasE
# - key: readability-identifier-naming.GlobalVariablePrefix
# value: ''
# - key: readability-identifier-naming.GlobalVariableSuffix
# value: ''
# - key: readability-identifier-naming.IgnoreFailedSplit
# value: '0'
# - key: readability-identifier-naming.InlineNamespaceCase
# value: aNy_CasE
# - key: readability-identifier-naming.InlineNamespacePrefix
# value: ''
# - key: readability-identifier-naming.InlineNamespaceSuffix
# value: ''
- key: readability-identifier-naming.LocalConstantCase
value: lower_case
- key: readability-identifier-naming.LocalConstantPrefix
value: ''
- key: readability-identifier-naming.LocalConstantSuffix
value: ''
- key: readability-identifier-naming.LocalVariableCase
value: lower_case
- key: readability-identifier-naming.LocalVariablePrefix
value: ''
- key: readability-identifier-naming.LocalVariableSuffix
value: ''
# - key: readability-identifier-naming.MemberCase
# value: lower_case
# - key: readability-identifier-naming.MemberPrefix
# value: '_'
# - key: readability-identifier-naming.MemberSuffix
# value: ''
# - key: readability-identifier-naming.MethodCase
# value: aNy_CasE
# - key: readability-identifier-naming.MethodPrefix
# value: ''
# - key: readability-identifier-naming.MethodSuffix
# value: ''
# - key: readability-identifier-naming.NamespaceCase
# value: aNy_CasE
# - key: readability-identifier-naming.NamespacePrefix
# value: ''
# - key: readability-identifier-naming.NamespaceSuffix
# value: ''
- key: readability-identifier-naming.ParameterCase
value: lower_case
# - key: readability-identifier-naming.ParameterPackCase
# value: aNy_CasE
# - key: readability-identifier-naming.ParameterPackPrefix
# value: ''
# - key: readability-identifier-naming.ParameterPackSuffix
# value: ''
# - key: readability-identifier-naming.ParameterPrefix
# value: ''
- key: readability-identifier-naming.ParameterSuffix
value: '_'
- key: readability-identifier-naming.PrivateMemberCase
value: lower_case
- key: readability-identifier-naming.PrivateMemberPrefix
value: '_'
- key: readability-identifier-naming.PrivateMemberSuffix
value: ''
# - key: readability-identifier-naming.PrivateMethodCase
# value: aNy_CasE
# - key: readability-identifier-naming.PrivateMethodPrefix
# value: ''
# - key: readability-identifier-naming.PrivateMethodSuffix
# value: ''
# - key: readability-identifier-naming.ProtectedMemberCase
# value: aNy_CasE
# - key: readability-identifier-naming.ProtectedMemberPrefix
# value: ''
# - key: readability-identifier-naming.ProtectedMemberSuffix
# value: ''
# - key: readability-identifier-naming.ProtectedMethodCase
# value: aNy_CasE
# - key: readability-identifier-naming.ProtectedMethodPrefix
# value: ''
# - key: readability-identifier-naming.ProtectedMethodSuffix
# value: ''
# - key: readability-identifier-naming.PublicMemberCase
# value: aNy_CasE
# - key: readability-identifier-naming.PublicMemberPrefix
# value: ''
# - key: readability-identifier-naming.PublicMemberSuffix
# value: ''
# - key: readability-identifier-naming.PublicMethodCase
# value: aNy_CasE
# - key: readability-identifier-naming.PublicMethodPrefix
# value: ''
# - key: readability-identifier-naming.PublicMethodSuffix
# value: ''
# - key: readability-identifier-naming.StaticConstantCase
# value: aNy_CasE
# - key: readability-identifier-naming.StaticConstantPrefix
# value: ''
# - key: readability-identifier-naming.StaticConstantSuffix
# value: ''
# - key: readability-identifier-naming.StaticVariableCase
# value: aNy_CasE
# - key: readability-identifier-naming.StaticVariablePrefix
# value: ''
# - key: readability-identifier-naming.StaticVariableSuffix
# value: ''
# - key: readability-identifier-naming.StructCase
# value: aNy_CasE
# - key: readability-identifier-naming.StructPrefix
# value: ''
# - key: readability-identifier-naming.StructSuffix
# value: ''
# - key: readability-identifier-naming.TemplateParameterCase
# value: aNy_CasE
# - key: readability-identifier-naming.TemplateParameterPrefix
# value: ''
# - key: readability-identifier-naming.TemplateParameterSuffix
# value: ''
# - key: readability-identifier-naming.TemplateTemplateParameterCase
# value: aNy_CasE
# - key: readability-identifier-naming.TemplateTemplateParameterPrefix
# value: ''
# - key: readability-identifier-naming.TemplateTemplateParameterSuffix
# value: ''
# - key: readability-identifier-naming.TypeTemplateParameterCase
# value: aNy_CasE
# - key: readability-identifier-naming.TypeTemplateParameterPrefix
# value: ''
# - key: readability-identifier-naming.TypeTemplateParameterSuffix
# value: ''
# - key: readability-identifier-naming.TypedefCase
# value: aNy_CasE
# - key: readability-identifier-naming.TypedefPrefix
# value: ''
# - key: readability-identifier-naming.TypedefSuffix
# value: ''
# - key: readability-identifier-naming.UnionCase
# value: aNy_CasE
# - key: readability-identifier-naming.UnionPrefix
# value: ''
# - key: readability-identifier-naming.UnionSuffix
# value: ''
# - key: readability-identifier-naming.ValueTemplateParameterCase
# value: aNy_CasE
# - key: readability-identifier-naming.ValueTemplateParameterPrefix
# value: ''
# - key: readability-identifier-naming.ValueTemplateParameterSuffix
# value: ''
# - key: readability-identifier-naming.VariableCase
# value: aNy_CasE
# - key: readability-identifier-naming.VariablePrefix
# value: ''
# - key: readability-identifier-naming.VariableSuffix
# value: ''
# - key: readability-identifier-naming.VirtualMethodCase
# value: aNy_CasE
# - key: readability-identifier-naming.VirtualMethodPrefix
# value: ''
# - key: readability-identifier-naming.VirtualMethodSuffix
# value: ''
# - key: readability-simplify-boolean-expr.ChainedConditionalAssignment
# value: '0'
# - key: readability-simplify-boolean-expr.ChainedConditionalReturn
# value: '0'
- key: modernize-use-override.OverrideSpelling
value: 'ZMQ_OVERRIDE'
- key: modernize-use-override.FinalSpelling
value: 'ZMQ_FINAL'

View File

@ -1,2 +0,0 @@
# tree-wide clang format
41f459e1dc6f7cdedd1268298153c970e290b2ce

View File

@ -1,48 +0,0 @@
# Pull Request Notice
Before sending a pull request make sure each commit solves one clear, minimal,
plausible problem. Further each commit should have the following format:
```
Problem: X is broken
Solution: do Y and Z to fix X
```
Please try to have the code changes conform to our coding style. For your
convenience, you can install clang-format (at least version 5.0) and then
run ```make clang-format-check```. Don't fix existing issues, if any - just
make sure your changes are compliant. ```make clang-format-diff``` will
automatically apply the required changes.
To set a specific clang-format binary with autotools, you can for example
run: ```./configure CLANG_FORMAT=clang-format-5.0```
Please avoid sending a pull request with recursive merge nodes, as they
are impossible to fix once merged. Please rebase your branch on
zeromq/libzmq master instead of merging it.
```
git remote add upstream git@github.com:zeromq/libzmq.git
git fetch upstream
git rebase upstream/master
git push -f
```
In case you already merged instead of rebasing you can drop the merge commit.
```
git rebase -i HEAD~10
```
Now, find your merge commit and mark it as drop and save. Finally rebase!
If you are a new contributor please have a look at our contributing guidelines:
[CONTRIBUTING](http://zeromq.org/docs:contributing)
# FIRST TIME CONTRIBUTORS PLEASE NOTE
Please add an additional commit with a relicensing grant.
[Example](https://github.com/zeromq/libzmq/commit/fecbd42dbe45455fff3b6456350ceca047b82050)
[More information on RELICENSING effort](https://github.com/zeromq/libzmq/tree/master/RELICENSE/README.md)

View File

@ -1,22 +0,0 @@
*Please use this template for reporting suspected bugs or requests for help.*
# Issue description
# Environment
* libzmq version (commit hash if unreleased):
* OS:
# Minimal test code / Steps to reproduce the issue
1.
# What's the actual result? (include assertion message & call stack if applicable)
# What's the expected result?

19
.github/stale.yml vendored
View File

@ -1,19 +0,0 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 365
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 56
# Issues with these labels will never be considered stale
exemptLabels:
- "Help Request"
- "Feature Request"
- "Problem reproduced"
- Critical
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
activity for 365 days. It will be closed if no further activity occurs within
56 days. Thank you for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

View File

@ -1,230 +0,0 @@
name: CI
on:
push:
pull_request:
schedule:
- cron: "0 9 * * 5"
jobs:
build:
if: github.event_name == 'pull_request' || github.event_name == 'push'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- platform: x64
configuration: release
os: windows-2019
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
CMAKE_GENERATOR: Visual Studio 16 2019
MSVCVERSION: v142
MSVCYEAR: vs2019
ARTIFACT_NAME: v142-x64
ENABLE_DRAFTS: ON
- os: ubuntu-latest
BUILD_TYPE: default
PACKAGES: asciidoctor
DRAFT: disabled
POLLER: select
- os: ubuntu-latest
BUILD_TYPE: default
DRAFT: disabled
POLLER: poll
- os: ubuntu-latest
BUILD_TYPE: android
NDK_VERSION: android-ndk-r25
DRAFT: disabled
- os: ubuntu-latest
BUILD_TYPE: coverage
PACKAGES: libkrb5-dev libnorm-dev libpgm-dev libgnutls28-dev lcov
DRAFT: enabled
GSSAPI: enabled
PGM: enabled
NORM: enabled
TIPC: enabled
TLS: enabled
VMCI: enabled
- os: ubuntu-latest
BUILD_TYPE: valgrind
PACKAGES: valgrind libgnutls28-dev
DRAFT: enabled
- os: ubuntu-latest
BUILD_TYPE: cmake
CURVE: libsodium
DRAFT: enabled
PACKAGES: cmake libsodium-dev
TLS: enabled
- os: ubuntu-latest
BUILD_TYPE: cmake
CURVE: libsodium
DRAFT: enabled
GSSAPI: enabled
PACKAGES: cmake libsodium-dev libkrb5-dev
TLS: enabled
- os: ubuntu-latest
BUILD_TYPE: cmake
DRAFT: enabled
PACKAGES: cmake clang-format-18
DO_CLANG_FORMAT_CHECK: 1
- os: ubuntu-latest
BUILD_TYPE: default
PACKAGES: libkrb5-dev libnorm-dev libpgm-dev libgnutls28-dev libsodium-dev libnss3-dev libbsd-dev
CURVE: libsodium
ADDRESS_SANITIZER: enabled
DRAFT: enabled
- os: ubuntu-latest
BUILD_TYPE: default
PACKAGES: libkrb5-dev libnorm-dev libpgm-dev libgnutls28-dev libsodium-dev libnss3-dev libbsd-dev
CURVE: libsodium
GSSAPI: enabled
PGM: enabled
NORM: enabled
TIPC: enabled
IPv6: ON
TLS: enabled
USE_NSS: yes
VMCI: enabled
DRAFT: enabled
- os: ubuntu-latest
BUILD_TYPE: default
PACKAGES: libkrb5-dev libnorm-dev libpgm-dev libgnutls28-dev libsodium-dev libnss3-dev
CURVE: libsodium
GSSAPI: enabled
PGM: enabled
NORM: enabled
TIPC: enabled
IPv6: ON
TLS: enabled
USE_NSS: yes
VMCI: enabled
DRAFT: enabled
FORCE_98: enabled
CXX: clang++
- os: ubuntu-latest
BUILD_TYPE: abi-compliance-checker
PACKAGES: abi-dumper abi-compliance-checker
DRAFT: disabled
- os: ubuntu-latest
BUILD_TYPE: cmake
PACKAGES: clang-tidy clang-tools
DRAFT: enabled
CXX: clang++
- os: macos-latest
BUILD_TYPE: default
PACKAGES: automake autoconf libtool
DRAFT: enabled
- os: macos-latest
BUILD_TYPE: default
PACKAGES: automake autoconf libtool libsodium
CURVE: libsodium
DRAFT: disabled
env:
platform: ${{ matrix.platform }}
configuration: ${{ matrix.configuration }}
WITH_LIBSODIUM: ${{ matrix.WITH_LIBSODIUM }}
ENABLE_CURVE: ${{ matrix.ENABLE_CURVE }}
CMAKE_GENERATOR: ${{ matrix.CMAKE_GENERATOR }}
MSVCVERSION: ${{ matrix.MSVCVERSION }}
MSVCYEAR: ${{ matrix.MSVCYEAR }}
ARTIFACT_NAME: ${{ matrix.ARTIFACT_NAME }}
ENABLE_DRAFTS: ${{ matrix.ENABLE_DRAFTS }}
SODIUM_INCLUDE_DIR: ${{ github.workspace }}\libsodium\src\libsodium\include"
SODIUM_LIBRARY_DIR: ${{ github.workspace }}\libsodium\bin\${{ matrix.platform }}\${{ matrix.configuration }}\${{ matrix.MSVCVERSION }}\dynamic"
LIBZMQ_SRCDIR: ${{ github.workspace }}\libzmq
BUILD_TYPE: ${{ matrix.BUILD_TYPE }}
CURVE: ${{ matrix.CURVE }}
DRAFT: ${{ matrix.DRAFT }}
ADDRESS_SANITIZER: ${{ matrix.ADDRESS_SANITIZER }}
DO_CLANG_FORMAT_CHECK: ${{ matrix.DO_CLANG_FORMAT_CHECK }}
FORCE_98: ${{ matrix.FORCE_98 }}
CXX: ${{ matrix.CXX }}
GSSAPI: ${{ matrix.GSSAPI }}
PGM: ${{ matrix.PGM }}
NORM: ${{ matrix.NORM }}
TIPC: ${{ matrix.TIPC }}
IPv6: ${{ matrix.IPv6 }}
TLS: ${{ matrix.TLS }}
USE_NSS: ${{ matrix.USE_NSS }}
VMCI: ${{ matrix.VMCI }}
POLLER: ${{ matrix.POLLER }}
NDK_VERSION: ${{ matrix.NDK_VERSION }}
ANDROID_NDK_ROOT: /tmp/${{ matrix.NDK_VERSION }}
steps:
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
if: matrix.os == 'windows-2019'
- uses: actions/checkout@v2
if: matrix.WITH_LIBSODIUM == 'ON'
with:
repository: jedisct1/libsodium
ref: stable
path: libsodium
- name: Compile libsodium
if: matrix.WITH_LIBSODIUM == 'ON' && matrix.os == 'windows-2019'
shell: cmd
working-directory: libsodium
run: msbuild /v:minimal /p:Configuration=%Configuration%DLL builds\msvc\%MSVCYEAR%\libsodium\libsodium.vcxproj
- name: Copy libsodium
if: matrix.WITH_LIBSODIUM == 'ON' && matrix.os == 'windows-2019'
shell: powershell
working-directory: libsodium
run: Copy-Item "bin\${env:Platform}\${env:Configuration}\${env:MSVCVERSION}\dynamic\libsodium.lib" -Destination "bin\${env:Platform}\${env:Configuration}\${env:MSVCVERSION}\dynamic\sodium.lib"
- uses: actions/checkout@v2
with:
path: libzmq
- run: md build_libzmq
shell: cmd
if: matrix.os == 'windows-2019'
- name: build-win
if: matrix.os == 'windows-2019'
shell: cmd
working-directory: build_libzmq
run: |
cmake -D CMAKE_INCLUDE_PATH="%SODIUM_INCLUDE_DIR%" -D CMAKE_LIBRARY_PATH="%SODIUM_LIBRARY_DIR%" -D WITH_LIBSODIUM="%WITH_LIBSODIUM%" -D ENABLE_DRAFTS="%ENABLE_DRAFTS%" -D ENABLE_ANALYSIS="%ENABLE_ANALYSIS%" -D ENABLE_CURVE="%ENABLE_CURVE%" -D API_POLLER="%API_POLLER%" -D POLLER="%POLLER%" %EXTRA_FLAGS% -D WITH_LIBSODIUM="%WITH_LIBSODIUM%" -D LIBZMQ_WERROR="%LIBZMQ_WERROR%" -G "%CMAKE_GENERATOR%" "%LIBZMQ_SRCDIR%"
cmake --build . --config %configuration% --target install -- -verbosity:Minimal -maxcpucount
- name: test
if: matrix.os == 'windows-2019'
shell: cmd
working-directory: build_libzmq
run: ctest -C "%Configuration%"
- name: Add debian packages
if: matrix.os == 'ubuntu-latest' && (matrix.BUILD_TYPE != 'coverage' || github.repository == 'zeromq/libzmq')
uses: myci-actions/add-deb-repo@10
with:
repo-name: obs
repo: deb http://download.opensuse.org/repositories/network:/messaging:/zeromq:/git-stable/xUbuntu_20.04/ ./
keys-asc: https://download.opensuse.org/repositories/network:/messaging:/zeromq:/git-stable/xUbuntu_20.04/Release.key
install: ${{ matrix.PACKAGES }}
- name: Add brew packages
if: matrix.os == 'macos-latest'
shell: bash
run: brew install ${{ matrix.PACKAGES }}
- name: build
if: (matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest') && (matrix.BUILD_TYPE != 'coverage' || github.repository == 'zeromq/libzmq')
shell: bash
working-directory: libzmq
run: ./ci_build.sh
- name: coveralls
if: matrix.BUILD_TYPE == 'coverage' && github.repository == 'zeromq/libzmq'
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
path-to-lcov: /home/runner/work/libzmq/libzmq/libzmq/lcov.info
cron:
runs-on: ubuntu-latest
if: github.event_name == 'schedule'
strategy:
fail-fast: false
env:
BUILD_TYPE: cmake
CXX: clang++
CLANG_TIDY: clang-tidy
steps:
- name: Add debian packages
run: sudo apt-get install --yes clang-tidy clang-tools
- name: build
shell: bash
working-directory: libzmq
run: ./ci_build.sh

View File

@ -1,50 +0,0 @@
# Simple workflow for deploying static content to GitHub Pages
name: Deploy API docs content to Pages
on:
# Runs on pushes targeting the default branch
push:
branches: ["master"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
# Single deploy job since we're just deploying
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
## libzmq-specific CI/CD ##
- name: Install AsciiDoctor
run: sudo apt install -y asciidoctor
- name: Convert AsciiDoc with AsciiDoctor into HTML
run: ./autogen.sh && ./configure && make --directory=doc
## boilerplate steps to publish github Pages ##
- name: Setup Pages
uses: actions/configure-pages@v3
- name: Upload artifact
uses: actions/upload-pages-artifact@v2
with:
path: 'doc/'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2

View File

@ -1,35 +0,0 @@
name: Fuzzers
on:
push:
branches:
- master
pull_request:
paths:
- '.github/workflows/Fuzzers.yaml'
- 'src/*'
- 'tests/*fuzzer.cpp'
jobs:
Fuzzing:
runs-on: ubuntu-latest
if: github.repository == 'zeromq/libzmq'
strategy:
matrix:
san: [address, memory, undefined]
steps:
- name: Build Fuzzers (${{ matrix.san }})
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
sanitizer: ${{ matrix.san }}
oss-fuzz-project-name: 'libzmq'
allowed-broken-targets-percentage: 0
dry-run: false
- name: Run Fuzzers (${{ matrix.san }})
id: run
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
sanitizer: ${{ matrix.san }}
oss-fuzz-project-name: 'libzmq'
allowed-broken-targets-percentage: 0
dry-run: false
fuzz-seconds: 300

188
.gitignore vendored
View File

@ -1,123 +1,111 @@
syntax: glob # for hg-git users
# Generated build scripts and IDE generating files
## autotools
/Makefile
builds/Makefile
builds/deprecated-msvc/Makefile
doc/Makefile
doc/__pagelist
libtool
### automake
Makefile
Makefile.in
.deps/
.dirstamp
### autoconf
autom4te.cache
aclocal.m4
configure
libtool
config
config.status
config.log
configure
stamp-h1
## CMake
cmake-build-debug/
build/
## Android
builds/android/prefix
## IntelliJ
.idea/
## Visual Code
.vscode/
## other results-like folders
bin/
lib/
obj/
## Doxygen
doxygen/
## Packaging
packaging/nuget/*.nupkg
# Test related build files
libtestutil.a
libunity.a
# Some build outputs and temporal files
aclocal.m4
autom4te.cache
*.o
*.gcno
*.gcda
*.gcov
*.ncb
*.lo
*.loT
*.la
*.exe
*.html
*.pdf
*.ps
.*
*~
.*~
.libs
# /src
## Ignore generated files in configuration process
src/platform.hpp*
src/libzmq.pc
# /tools
## Executable binaries are ignored
tools/curve_keygen.o
tools/curve_keygen
## Executable source files must be tracked
!tools/*.[ch]
!tools/*.[ch]pp
# /tests
## Test binaries and logs are ignored
tests/test*
tests/test_issue_566
tests/test_ctx_destroy
tests/test_term_endpoint
tests/test_system
tests/test_monitor
tests/test_last_endpoint
tests/test_pair_inproc
tests/test_pair_ipc
tests/test_pair_tcp
tests/test_reqrep_inproc
tests/test_reqrep_ipc
tests/test_reqrep_tcp
tests/test_shutdown_stress
tests/test_hwm
tests/test_timeo
tests/test_reqrep_device
tests/test_reqrep_drop
tests/test_sub_forward
tests/test_invalid_rep
tests/test_msg_flags
tests/test_ts_context
tests/test_connect_resolve
tests/test_immediate
tests/test_term_endpoint
tests/test_router_mandatory
tests/test_disconnect_inproc
tests/test_raw_sock
tests/test_disconnect_inproc
tests/test_ctx_options
tests/test_iov
tests/test_security
tests/test_security_curve
tests/test_probe_router
tests/test_stream
tests/test_spec_dealer
tests/test_spec_pushpull
tests/test_spec_rep
tests/test_spec_req
tests/test_spec_router
tests/test_req_correlate
tests/test_req_relaxed
tests/test_fork
tests/test_conflate
tests/test_inproc_connect
tests/test_linger
tests/test_security_null
tests/test_security_plain
tests/test_abstract_ipc
tests/test_connect_delay_tipc
tests/test_pair_tipc
tests/test_reqrep_device_tipc
tests/test_reqrep_tipc
tests/test_router_handover
tests/test_router_mandatory_tipc
tests/test_router_raw_empty
tests/test_shutdown_stress_tipc
tests/test_sub_forward_tipc
tests/test_term_endpoint_tipc
tests/test_many_sockets
tests/test*.log
tests/test*.trs
## Test source files must be tracked
!tests/test*.[ch]
!tests/test*.[ch]pp
## Build script and documentations must be tracked
!tests/CMakeLists.txt
!tests/README.md
# /unittests
## Unit test binaries and logs are ignored
unittests/unittest_*
unittests/unittest*.log
unittests/unittest*.trs
## Unit test source files must be tracked
!unittests/unittest*.[ch]
!unittests/unittest*.[ch]pp
## Build script and documentations must be tracked
!unittests/CMakeLists.txt
!unittests/README.md
# check test log files
test-suite*.log
# /perf
## Benchmarking binaries and result files are ignored
perf/*_lat
perf/*_thr
perf/benchmark_*
perf/results
## Benchmarking source files must be tracked
!perf/*.[ch]
!perf/*.[ch]pp
## Benchmarking tool scripts must be tracked
!perf/*.py
!perf/*.sh
# /doc
## Generated document files
doc/*.[137]
src/platform.hpp*
src/stamp-h1
perf/local_lat
perf/local_thr
perf/remote_lat
perf/remote_thr
perf/inproc_lat
perf/inproc_thr
doc/*.1
doc/*.3
doc/*.7
doc/*.html
doc/*.xml
# external libraries and release archive files
src/libzmq.pc
bin/
lib/
obj/
builds/msvc/*.suo
builds/msvc/*.sdf
builds/msvc/*/*.user
builds/msvc/*/*Debug
builds/msvc/*/*Release
builds/redhat/zeromq.spec
foreign/openpgm/*
!foreign/openpgm/*.tar.bz2
!foreign/openpgm/*.tar.gz
@ -125,5 +113,3 @@ foreign/openpgm/*
zeromq-*.tar.gz
zeromq-*.zip
core
mybuild

View File

@ -1,81 +0,0 @@
Ahmet Kakici <ahmet.kakici@pro-line.com.tr> ahmet <ahmet.kakici@pro-line.com.tr>
Andrey Sibiryov <me@kobology.ru> Kobolog <me@kobology.ru>
Brian Knox <taotetek@gmail.com> taotetek <taotetek@users.noreply.github.com>
Chernyshev Vyacheslav <astellar@ro.ru> Astellar <astellar@ro.ru>
Chris Laws <clawsicus@gmail.com> Chris Laws <claws@localhost>
Chris Staite <chris@yourdreamnet.co.uk> Chris <chris@yourdreamnet.co.uk>
Christoph Zach <czach@rst-automation.com> czach <czach@rst-automation.com>
Chuck Remes <git@chuckremes.com> Chuck Remes <cremes@mac.com>
Chuck Remes <git@chuckremes.com> Chuck Remes <cremes.devlist@mac.com>
Constantin Rack <constantin.rack@gmail.com> Constantin Rack <constantin@rack.li>
Constantin Rack <constantin.rack@gmail.com> Constantin Rack <c-rack@users.noreply.github.com>
Daniel Krikun <krikun.daniel@gmail.com> danielkr <krikun.daniel@gmail.com>
Daiyu Hurst <daiyu.hurst@gmail.com> DaiyuHurst <daiyu.hurst@gmail.com>
Diego Rodriguez-Losada <diego.rlosada@gmail.com> Diego <diego.rlosada@gmail.com>
Dongmin Yu <miniway@gmail.com> Min(Dongmin Yu) <miniway@gmail.com>
Doron Somech <somdoron@gmail.com> somdoron <somdoron@gmail.com>
Elliot Saba <staticfloat@gmail.com> staticfloat <staticfloat@gmail.com>
Eric Voskuil <eric@voskuil.org> evoskuil <eric@voskuil.org>
Eric Voskuil <eric@voskuil.org> anonymous <eric@voskuil.org>
Felipe Farinon <felipe.farinon@powersyslab.com> psl-felipefarinon <felipe.farinon@powersyslab.com>
Frank Hartmann <soundart@gmx.net> Frank <soundart@gmx.net>
Gian Lorenzo Meocci <glmeocci@gmail.com> meox <glmeocci@gmail.com>
Hardeep Singh <hshardeesi@gmail.com> Hardeep <hshardeesi@gmail.com>
Henrik Feldt <henrik@haf.se> Henrik <henrik@haf.se>
Huang Xin <chrox.huang@gmail.com> chrox <chrox.huang@gmail.com>
Ian Barber <ian.barber@gmail.com> Ian Barber <ianbarber@google.com>
Jens Auer <jens.auer@cgi.com> Jens Auer <jens-auer@users.noreply.github.com>
Jens Auer <jens.auer@cgi.com> Jens Auer <jens.auer@betaversion.net>
Joe Eli McIlvain <joe.eli.mac@gmail.com> Joe McIlvain <joe.eli.mac@gmail.com>
Jos Decoster <jos.decoster@gmail.com> jdc8 <jos.decoster@gmail.com>
Jos Decoster <jos.decoster@gmail.com> Jos Decoster <jos.decoster@retarget.com>
Joshua Gao <jmg116@gmail.com> Josh Gao <jgao@mobileiron.com>
Jörg Kreuzberger <joerg@kreuzberger.eu> kreuzberger <joerg@kreuzberger.eu>
Arnaud Kapp <kapp.arno@gmail.com> Kapp Arnaud <kapp.arno@gmail.com>
Arnaud Kapp <kapp.arno@gmail.com> KAPP Arnaud <kapp.arno@gmail.com>
Arnaud Kapp <kapp.arno@gmail.com> KAPP Arnaud <xaqq@users.noreply.github.com>
Kenneth Wilke <kenneth.wilke@rackspace.com> KennethWilke <kenneth.wilke@rackspace.com>
Kevin Sapper <mail@kevinsapper.de> sappo <mail@kevinsapper.de>
Kevin Sapper <mail@kevinsapper.de> Kevin Sapper <sappo@users.noreply.github.com>
Leonard Michelet <leonard.michelet@openwide.fr> leonarf <leonard.michelet@openwide.fr>
Martijn Jasperse <m.jasperse@gmail.com> mjasperse <m.jasperse@gmail.com>
Martin Hurton <hurtonm@gmail.com> Martin Hurtoň <hurtonm@gmail.com>
Martin Lucina <martin@lucina.net> Martin Lucina <mato@kotelna.sk>
Martin Sustrik <sustrik@250bpm.com> Martin Sustrik <sustrik@fastmq.commkdir>
Martin Sustrik <sustrik@250bpm.com> Martin Sustrik <sustrik@fastmq.com>
Martin Sustrik <sustrik@250bpm.com> sustrik <sustrik@250bpm.com>
Martin Sustrik <sustrik@250bpm.com> Martin Sustrik <sustrik@jozsi.(none)>
Martin Sustrik <sustrik@250bpm.com> unknown <sustrik@.(none)>
Martin Sustrik <sustrik@250bpm.com> Martin Sustrik <sustrik@turist.(none)>
Maurice Barnum <msb@yahoo-inc.com> maurice barnum <msb@yahoo-inc.com>
Maurizio Melato <maurizio.melato@nice-software.com> unknown <mauri@okinawa.(none)>
Max Skaller <Max.Skaller@gmail.com> skaller <Max.Skaller@gmail.com>
Michael Fox <415fox@gmail.com> m <415fox@gmail.com>
Michael Hand <mipa@matrix.by> Mipa <mipa@matrix.by>
Michel Zou <xantares10@hotmail.com> xantares <xantares09@hotmail.com>
Mikael Helbo Kjaer <mhk@designtech.dk> Mikael Helbo Kjær <mhk@designtech.dk>
Mike Gatny <mgatny@gmail.com> Mike Gatny <mgatny@connamara.com>
Mikko Koppanen <mikko.koppanen@gmail.com> Mikko Koppanen <mkoppanen@php.net>
Mikko Koppanen <mikko.koppanen@gmail.com> Mikko Koppanen <mikko@kuut.io>
Mikko Koppanen <mikko.koppanen@gmail.com> Mikko Koppanen <mkoppanen@gameboy.config>
Min RK <benjaminrk@gmail.com> MinRK <benjaminrk@gmail.com>
Min RK <benjaminrk@gmail.com> Min Ragan-Kelley <benjaminrk@gmail.com>
Montoya Edu <montoya.edu@gmail.com> montoyaedu <montoya.edu@gmail.com>
Nikita Kozlov <nikita@elyzion.net> nikita kozlov <nikita@elyzion.net>
Pavol Malosek <malosek@fastmq.com> malosek <malosek@fastmq.com>
Pieter Hintjens <ph@imatix.com> Pieter Hintjens <ph@itmatix.com>
Reza Ebrahimi <reza.ebrahimi.dev@gmail.com> reza.ebrahimi <reza.ebrahimi.dev@gmail.com>
Ricardo Catalinas Jiménez <r@untroubled.be> Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
Rohan Bedarkar <rohanb@cs.uchicago.edu> rohanbedarkar <rohanb@cs.uchicago.edu>
Rohan Bedarkar <rohanb@cs.uchicago.edu> Rohan <rbe@ws5-34-chi.rtsgroup.net>
Sergey KHripchenko <shripchenko@intermedia.net> root <root@ast-pbx-mt-3.intermedia.net>
Sergey KHripchenko <shripchenko@intermedia.net> shripchenko <shripchenko@intermedia.net>
Sergey M. <dstftw@gmail.com> Sergey M <dstftw@gmail.com>
Steven McCoy <steven.mccoy@miru.hk> Steve-o <fnjordy@gmail.com>
Tamara Kustarova <kustarova@fastmq.com> tamara <tamara@jozsi.(none)>
Timothee Besset <ttimo@ttimo.net> Timothee "TTimo" Besset <ttimo@ttimo.net>
Timothy Mossbarger <tim@ent.net> Tim M <tim@ent.net>
Trevor Bernard <trevor.bernard@gmail.com> Trevor Bernard <tbernard@liveops.com>
Trevor Bernard <trevor.bernard@gmail.com> Trevor Bernard <trevor.bernard@userevents.com>
Volodymyr Korniichuk <VolodymyrKorn@gmail.com> Volodymyr Korniichuk <9173519@gmail.com>
lysyloren <lysy_loren@gmail.com> lysyloren <lysy.loren@gmail.com>

View File

@ -1,26 +0,0 @@
workflow:
steps:
- branch_package:
source_project: network:messaging:zeromq:git-draft
source_package: libzmq
target_project: network:messaging:zeromq:ci
rebuild:
steps:
- trigger_services:
project: network:messaging:zeromq:git-stable
package: libzmq
- trigger_services:
project: network:messaging:zeromq:git-draft
package: libzmq
filters:
event: push
release:
steps:
- trigger_services:
project: network:messaging:zeromq:release-stable
package: libzmq
- trigger_services:
project: network:messaging:zeromq:release-draft
package: libzmq
filters:
event: tag_push

View File

@ -1,38 +0,0 @@
#
# libzmq readthedocs.io integration
#
# This configuration file is processed by readthedocs.io to rebuild the
# libzmq documentation using Asciidoctor, see
# https://docs.readthedocs.io/en/stable/build-customization.html#asciidoc
version: "2"
formats:
- htmlzip
build:
os: "ubuntu-22.04"
tools:
nodejs: "20"
# NOTE: as of Nov 2023, build.apt_packages is NOT considered when using build.commands
#apt_packages:
# - automake
# - autoconf
# - cmake
# - libtool
commands:
# install required tools
- npm install -g asciidoctor
# HTML docs
# ---------
- doc/create_page_list.sh "$(pwd)/doc/__pagelist" "$(pwd)/doc"
- asciidoctor --backend html --destination-dir $READTHEDOCS_OUTPUT/html --attribute stylesheet=asciidoctor.css --attribute zmq_version='4.3.6' --attribute zmq_pagelist_dir=$(pwd)/doc doc/*.adoc
# HTMLZIP docs
# ------------
# Note that for usability we make sure zip will create a zipfile containing just a flat list of HTML files;
# to achieve that it's important to avoid storing absolute paths when invoking "zip", thus we use -j
# Also note that the archive name should match exactly the project slug, "libzmq" in this case.
- mkdir -p $READTHEDOCS_OUTPUT/htmlzip/
- cd $READTHEDOCS_OUTPUT/html && zip -j ../htmlzip/libzmq.zip *.html

View File

@ -1,43 +1,21 @@
# Travis CI script
# libzmq
language: c
os:
- linux
# Build required projects first
before_script:
dist: bionic
# libsodium
# Commit 8d0942 broke installation (sodium.h not found) so for now
# we're checking out the last good commit.
- git clone git://github.com/jedisct1/libsodium.git
- cd libsodium
- git checkout e2a30a
- ./autogen.sh
- ./configure && make check
- sudo make install
- sudo ldconfig
- cd ..
cache: ccache
env:
matrix:
- BUILD_TYPE=default
# tokens to deploy releases on OBS and create/delete temporary branch on Github.
# 1) Create a token on https://github.com/settings/tokens/new with "public_repo"
# capability and encrypt it with travis encrypt --org -r zeromq/libzmq GH_TOKEN="<token>"
# 2) Create 2 OBS tokens with osc token --create network:messaging:zeromq:release-<stable|draft> libzmq
# encrypt them with travis encrypt --org -r zeromq/libzmq OBS_<STABLE|DRAFT>_TOKEN="<token>"
global:
- secure: aaIs9Y44FYp9VFCqa6LLD4illBH4aUfbS0zzzbAQ5xJvD6NfBsMiKEIhf/kRNCHAtP+1VfQVOejTD6/i08ALsVr3cZD9oB/t7874tz2/jeZUIhRNo+1KwyaVqNg0yUSV6ASIoq4aOfuGnjBlezNQ8LQ2bjQB2m4Enl5wxoYcYdA=
- secure: YFrcedBIKe0NR1WC6qQi9phZgtnzOiBIXm40TirvCtstV4eVnSouKgtQfLLArZ4o2tjflq4grQQNo1rJatvyi5YPOXsMcndsni18S+4Ffu8qbECdtPrK52vBweuf7q9oV9Ydax0Fm4bEqEMOZ2/mRBy3nK+mgsE3upeMwyWR0Zw=
- secure: lbZSzmqN39QdJwewKOZgq/1ijPKuyx9MFrGzMqXj2+eOSlaZS/tNavHMdKJOev+qJGK9wxmwzxOxS10AiH+AvN7WBacXX4ZtudjScz2HKJRDWTKyzMbzyScq51afniItzrsm+Vo8NHkenNFkux0sSbh0aHlpkLwrGQu+WZWcDN4=
- secure: "ZFL7hLJlGwYix8fF835OnQYakBt/o5iS7IfSW7el44ejEvGAOM9O5/ufxCcqSqn8Np7nOaM3RriAVTqWPZD6S7tMeflGTSGYHPYwWUc83z4rUPyG2FWVKXdB8ufpebAwu3hCgLiSmVeoQG47dl6xNk1oKCd+3UIjgz33u1Ecfps="
# Build and check this project according to the BUILD_TYPE
script: ./ci_build.sh
# Deploy tags
before_deploy:
- . ./ci_deploy.sh
deploy:
provider: releases
api_key:
secure: vGB5E+A8wxm2J1GJZzmIgT9PrjEzvd9gE8iui8FyxSbxAsW9vFZFGZC/21sTtpVcmRarwQCHH1UEbtg+nJwN2iD9YzMRnSVks8xqP+b709YW+VXaMuhZgTzWa74IorQku7NuvLibvQk72/OSgdwPGaNJ6f5AX9pnWVWbEoW1svE=
file_glob: true
file: ${LIBZMQ_DEPLOYMENT}
skip_cleanup: true
on:
repo: zeromq/libzmq
branch: master
tags: true
condition: "$TRAVIS_OS_NAME =~ (linux) && $BUILD_TYPE =~ (default) && $CURVE =~ (libsodium) && -z $DRAFT"
# Build and check libzmq
script: ./autogen.sh && ./configure && make V=1 && make check

247
AUTHORS
View File

@ -1,153 +1,124 @@
Corporate Contributors
======================
Copyright (c) 2007-2014 iMatix Corporation
Copyright (c) 2007-2013 iMatix Corporation
Copyright (c) 2009-2011 250bpm s.r.o.
Copyright (c) 2010-2011 Miru Limited
Copyright (c) 2011 VMware, Inc.
Copyright (c) 2012 Spotify AB
Copyright (c) 2013 Ericsson AB
Copyright (c) 2014 AppDynamics Inc.
Copyright (c) 2015 Google, Inc.
Copyright (c) 2015-2016 Brocade Communications Systems Inc.
Individual Contributors
=======================
AJ Lewis
Alexej Lotz
Andrew Thompson
André Caron
Asko Kauppi
Attila Mark
Barak Amar
Ben Gray
Bernd Melchers
Bernd Prager
Bob Beaty
Brandon Carpenter
Brett Cameron
Brett Viren
Brian Buchanan
Burak Arslan
Carl Clemens
Chia-liang Kao
Chris Busbey
Chris Rempel
Chris Wong
Christian Gudrian
Christian Kamm
Chuck Remes
Conrad D. Steenberg
Constantin Rack
Daniel J. Bernstein
Dhammika Pathirana
Dhruva Krishnamurthy
Dirk O. Kaar
Doron Somech
Douglas Creager
Drew Crawford
Erich Heine
Erik Hugne
Erik Rigtorp
Fabien Ninoles
Frank Denis
George Neill
Gerard Toonstra
Ghislain Putois
Gonzalo Diethelm
Guido Goldstein
Harald Achitz
Hardeep Singh
Hiten Pandya
Ian Barber
Ilja Golshtein
Ilya Kulakov
Ivo Danihelka
Jacob Rideout
Joe Thornber
Jon Dyte
Kamil Shakirov
Ken Steele
Kouhei Sutou
Leonardo J. Consoni
Lionel Flandrin
Lourens Naudé
Luca Boccassi
Marc Rossi
Mark Barbisan
Martin Hurton
Martin Lucina
Martin Pales
Martin Sustrik
Matus Hamorsky
Max Wolf
McClain Looney
Michael Compton
Mika Fischer
Mikael Helbo Kjaer
Mike Gatny
Mikko Koppanen
Min Ragan-Kelley
Neale Ferguson
Nir Soffer
Osiris Pedroso
Paul Betts
Paul Colomiets
Pavel Gushcha
Pavol Malosek
Perry Kundert
Peter Bourgon
Philip Kovacs
Pieter Hintjens
Piotr Trojanek
Reza Ebrahimi
Richard Newton
Rik van der Heijden
Robert G. Jakabosky
Sebastian Otaegui
Stefan Radomski
Steven McCoy
Stuart Webster
Tamara Kustarova
Taras Shpot
Tero Marttila
Terry Wilson
Thijs Terlouw
Thomas Rodgers
Tim Mossbarger
Toralf Wittner
Tore Halvorsen
Trevor Bernard
Vitaly Mayatskikh
Yacheng Zhou
AJ Lewis <aj.lewis@quantum.com>
Alexej Lotz <alexej.lotz@arcor.de>
Andrew Thompson <andy@fud.org.nz>
Asko Kauppi <askok@dnainternet.net>
Attila Mark <gougolith@gmail.com>
Barak Amar <barak.amar@gmail.com>
Ben Gray <ben@benjamg.com>
Bernd Prager <bernd@prager.ws>
Bernd Melchers <melchers@ZEDAT.FU-Berlin.DE>
Bob Beaty <rbeaty@peak6.com>
Brandon Carpenter <hashstat@yahoo.com>
Brian Buchanan <bwb@holo.org>
Brett Cameron <Brett.Cameron@hp.com>
Burak Arslan <burak-github@arskom.com.tr>
Carl Clemens <carlclemens1@yahoo.com>
Chia-liang Kao <clkao@clkao.org>
Chris Rempel <csrl@gmx.com>
Chris Wong <chris@chriswongstudio.com>
Christian Gudrian <christian.gudrian@fluidon.com>
Christian Kamm <kamm@incasoftware.de>
Chuck Remes <cremes@mac.com>
Conrad D. Steenberg <conrad.steenberg@caltech.edu>
Dhammika Pathirana <dhammika@gmail.com>
Dhruva Krishnamurthy <dhruva@ymail.com>
Dirk O. Kaar <dok@dok-net.net>
Douglas Creager <douglas.creager@redjack.com>
Erich Heine <sophacles@gmail.com>
Erik Rigtorp <erik@rigtorp.com>
Fabien Ninoles <fabien@tzone.org>
Frank Denis <zeromq@pureftpd.org>
George Neill <georgen@neillnet.com>
Gerard Toonstra <gtoonstra@gmail.com>
Ghislain Putois <ghpu@infonie.fr>
Gonzalo Diethelm <gdiethelm@dcv.cl>
Guido Goldstein <zmq@a-nugget.de>
Ian Barber <ian.barber@gmail.com>
Ilja Golshtein <ilejncs@narod.ru>
Ivo Danihelka <ivo@danihelka.net>
Jacob Rideout <jacob.rideout@returnpath.net>
Joe Thornber <joe.thornber@gmail.com>
Jon Dyte <jon@totient.co.uk>
Kamil Shakirov <kamils80@gmail.com>
Ken Steele <ken@tilera.com>
Marc Rossi <mrossi19@gmail.com>
Martin Hurton <hurtonm@gmail.com>
Martin Lucina <martin@lucina.net>
Martin Pales <m.pales@gmail.com>
Martin Sustrik <sustrik@250bpm.com>
Matus Hamorsky <mhamorsky@gmail.com>
Max Wolf <YIDIEPXGXGPN@spammotel.com>
McClain Looney <m@loonsoft.com>
Michael Compton <michael.compton@littleedge.co.uk>
Mika Fischer <mika.fischer@zoopnet.de>
Mikael Helbo Kjaer <mhk@designtech.dk>
Mikko Koppanen <mkoppanen@php.net>
Min Ragan-Kelley <benjaminrk@gmail.com>
Neale Ferguson <neale@sinenomine.net>
Nir Soffer <nirsof@gmail.com>
Paul Betts <paul@paulbetts.org>
Paul Colomiets <pc@gafol.net>
Pavel Gushcha <pavimus@gmail.com>
Pavol Malosek <malosek@fastmq.com>
Perry Kundert <perry@kundert.ca>
Peter Bourgon <peter.bourgon@gmail.com>
Philip Kovacs <phil@philkovacs.com>
Pieter Hintjens <ph@imatix.com>
Piotr Trojanek <piotr.trojanek@gmail.com>
Richard Newton <richard_newton@waters.com>
Robert G. Jakabosky <bobby@sharedrealm.com>
Sebastian Otaegui <feniix@gmail.com>
Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de>
Steven McCoy <steven.mccoy@miru.hk>
Stuart Webster <sw_webster@hotmail.com>
Tamara Kustarova <kustarova.tamara@gmail.com>
Taras Shpot <taras.shpot@eleks.com>
Tero Marttila <terom@fixme.fi>
Terry Wilson <terry@logivox.net>
Thijs Terlouw <thijsterlouw@gmail.com>
Toralf Wittner <toralf.wittner@gmail.com>
Tore Halvorsen <tore.halvorsen@gmail.com>
Vitaly Mayatskikh <v.mayatskih@gmail.com>
Lourens Naudé <lourens@methodmissing.com>
Hardeep Singh <hshardeesi@gmail.com>
Credits
=======
Aamir Mohammad
Adrian von Bidder
Aleksey Yeschenko
Alessio Spadaro
Alexander Majorov
Anh Vu
Bernd Schumacher
Brian Granger
Carsten Dinkelmann
David Bahi
Dirk Eddelbuettel
Evgueny Khartchenko
Frank Vanden Berghen
Ian Barber
John Apps
Markus Fischer
Matt Muggeridge
Michael Santy
Oleg Sevostyanov
Paulo Henrique Silva
Peter Busser
Peter Lemenkov
Robert Zhang
Toralf Wittner
Zed Shaw
Aamir Mohammad <aamirjvm@gmail.com>
Adrian von Bidder <avbidder@fortytwo.ch>
Aleksey Yeschenko <aleksey@yeschenko.com>
Alessio Spadaro <alessio.spadaro@finservice.com>
Alexander Majorov <alexander.majorov@intel.com>
Anh Vu <vietanh.vu@m4x.org>
Bernd Schumacher <bernd.schumacher@hp.com>
Brian Granger <ellisonbg.net@gmail.com>
Carsten Dinkelmann <din@foobar-cpa.de>
David Bahi <dbahi@novell.com>
Dirk Eddelbuettel <edd@debian.org>
Evgueny Khartchenko <Evgueny.Khartchenko@intel.com>
Frank Vanden Berghen <frank@applied-mathematics.net>
Ian Barber <ian.barber@gmail.com>
John Apps <john.apps@hp.com>
Markus Fischer <markus.fischer@hpc-solutions.com>
Matt Muggeridge <Matt.Muggeridge@hp.com>
Michael Santy <Michael.Santy@dynetics.com>
Oleg Sevostyanov <oleg.sev@gmail.com>
Paulo Henrique Silva <ph.silva@gmail.com>
Peter Busser <busserpeter@gmail.com>
Peter Lemenkov <lemenkov@gmail.com>
Robert Zhang <robert@scout-trading.com>
Toralf Wittner <toralf.wittner@gmail.com>
Zed Shaw <zed.shaw@gmail.com>

File diff suppressed because it is too large Load Diff

674
COPYING Normal file
View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

181
COPYING.LESSER Normal file
View File

@ -0,0 +1,181 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
--------------------------------------------------------------------------------
SPECIAL EXCEPTION GRANTED BY COPYRIGHT HOLDERS
As a special exception, copyright holders give you permission to link this
library with independent modules to produce an executable, regardless of
the license terms of these independent modules, and to copy and distribute
the resulting executable under terms of your choice, provided that you also
meet, for each linked independent module, the terms and conditions of
the license of that module. An independent module is a module which is not
derived from or based on this library. If you modify this library, you must
extend this exception to your version of the library.
Note: this exception relieves you of any obligations under sections 4 and 5
of this license, and section 6 of the GNU General Public License.

View File

@ -1,32 +0,0 @@
FROM debian:buster-slim AS builder
LABEL maintainer="ZeroMQ Project <zeromq@imatix.com>"
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qq \
&& apt-get install -qq --yes --no-install-recommends \
autoconf \
automake \
build-essential \
git \
libkrb5-dev \
libsodium-dev \
libtool \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /opt/libzmq
COPY . .
RUN ./autogen.sh \
&& ./configure --prefix=/usr/local --with-libsodium --with-libgssapi_krb5 \
&& make \
&& make check \
&& make install
FROM debian:buster-slim
LABEL maintainer="ZeroMQ Project <zeromq@imatix.com>"
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -qq \
&& apt-get install -qq --yes --no-install-recommends \
libkrb5-dev \
libsodium23 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local /usr/local
RUN ldconfig && ldconfig -p | grep libzmq

File diff suppressed because it is too large Load Diff

71
INSTALL
View File

@ -14,63 +14,6 @@ If you clone the Git repository then you should start by running the
command `./autogen.sh`. This is not necessary if you get the source
packages.
CMake installation
==================
The following options are available for cmake invocation:
- `WITH_PERF_TOOL'
Enables the build of performance tools. Default value is ON.
- `ZMQ_BUILD_TESTS'
Builds ZeroMQ tests. Default value is ON.
- `ENABLE_CPACK'
Enables CPack build rules. This option has effect on Windows
platform only. Default value is ON. Turn it to OFF if you
don't want the runtime libraries to be installed (typically
if your installation destination already contains them).
Example: installing ZeroMQ on Windows with no tests, no performance
tools, and no runtime library copy:
cmake -G "NMake Makefiles" -D WITH_PERF_TOOL=OFF -D ZMQ_BUILD_TESTS=OFF
-D ENABLE_CPACK=OFF -D CMAKE_BUILD_TYPE=Release
Windows Builds
==============
On Windows, use CMake for building, or for generating a Visual Studio solution file.
The library can also be built for the Windows 10 UWP platform through CMake :
cmake -H. -B<build dir> -G"Visual Studio 14 2015 Win64" \
-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 \
-DENABLE_CURVE=OFF -DZMQ_BUILD_TESTS=OFF
In VS 2012 it is mandatory to increase the default stack size of 1 MB to
at least 2 MB due to implementation of std::map intermittently requiring
substantial amount of stack and causing stack overflow.
Windows Builds - Static
=======================
When linking statically with libzmq your CFLAGS and/or CPPFLAGS need to include
`-DZMQ_STATIC` otherwise `__dclspec(dllimport)` will be set for all functions
and the build will fail.
This is a workaround for issue:
https://github.com/zeromq/libzmq/issues/2788
Windows Builds - Wine
=====================
To use Windows binaries on *nix via Wine, it is necessary to ensure that the
kernel TCP buffers are large enough. On some systems, like OS X, they are too
small by default.
They need to be set to at least one MB as a workaround for issue:
https://github.com/zeromq/libzmq/issues/1608
sudo sysctl -w net.inet.tcp.sendspace=1300000
Basic Installation
==================
@ -119,8 +62,7 @@ The simplest way to compile this package is:
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package. Note that `make -j check' is not supported as some
tests share infrastructure and cannot be run in parallel.
the package.
4. Type `make install' to install the programs and any data files and
documentation.
@ -137,17 +79,6 @@ The simplest way to compile this package is:
6. Often, you can also type `make uninstall' to remove the installed
files again.
OS X Builds - Documentation
===========================
Basic installation on OS X may fail in `Making all in doc' step. This
error can be resolved by adding environment variable for shell.
export XML_CATALOG_FILES=/usr/local/etc/xml/catalog
Write command above in shell for instant resolve, or append command into
shell profile file and reload for permanent resolve.
Compilers and Options
=====================

485
Jenkinsfile vendored
View File

@ -1,485 +0,0 @@
pipeline {
agent { label "linux || macosx || bsd || solaris || posix || windows" }
parameters {
// Use DEFAULT_DEPLOY_BRANCH_PATTERN and DEFAULT_DEPLOY_JOB_NAME if
// defined in this jenkins setup -- in Jenkins Management Web-GUI
// see Configure System / Global properties / Environment variables
// Default (if unset) is empty => no deployment attempt after good test
// See zproject Jenkinsfile-deploy.example for an example deploy job.
// TODO: Try to marry MultiBranchPipeline support with pre-set defaults
// directly in MultiBranchPipeline plugin, or mechanism like Credentials,
// or a config file uploaded to master for all jobs or this job, see
// https://jenkins.io/doc/pipeline/examples/#configfile-provider-plugin
string (
defaultValue: '${DEFAULT_DEPLOY_BRANCH_PATTERN}',
description: 'Regular expression of branch names for which a deploy action would be attempted after a successful build and test; leave empty to not deploy. Reasonable value is ^(master|release/.*|feature/*)$',
name : 'DEPLOY_BRANCH_PATTERN')
string (
defaultValue: '${DEFAULT_DEPLOY_JOB_NAME}',
description: 'Name of your job that handles deployments and should accept arguments: DEPLOY_GIT_URL DEPLOY_GIT_BRANCH DEPLOY_GIT_COMMIT -- and it is up to that job what to do with this knowledge (e.g. git archive + push to packaging); leave empty to not deploy',
name : 'DEPLOY_JOB_NAME')
booleanParam (
defaultValue: true,
description: 'If the deployment is done, should THIS job wait for it to complete and include its success or failure as the build result (true), or should it schedule the job and exit quickly to free up the executor (false)',
name: 'DEPLOY_REPORT_RESULT')
booleanParam (
defaultValue: true,
description: 'Attempt stable build without DRAFT API in this run?',
name: 'DO_BUILD_WITHOUT_DRAFT_API')
booleanParam (
defaultValue: true,
description: 'Attempt build with DRAFT API in this run?',
name: 'DO_BUILD_WITH_DRAFT_API')
booleanParam (
defaultValue: true,
description: 'Attempt a build with docs in this run? (Note: corresponding tools are required in the build environment)',
name: 'DO_BUILD_DOCS')
booleanParam (
defaultValue: false,
description: 'Publish as an archive a "dist" tarball from a build with docs in this run? (Note: corresponding tools are required in the build environment; enabling this enforces DO_BUILD_DOCS too)',
name: 'DO_DIST_DOCS')
booleanParam (
defaultValue: true,
description: 'Attempt "make check" in this run?',
name: 'DO_TEST_CHECK')
booleanParam (
defaultValue: false,
description: 'Attempt "make memcheck" in this run?',
name: 'DO_TEST_MEMCHECK')
booleanParam (
defaultValue: true,
description: 'Attempt "make distcheck" in this run?',
name: 'DO_TEST_DISTCHECK')
booleanParam (
defaultValue: true,
description: 'Attempt a "make install" check in this run?',
name: 'DO_TEST_INSTALL')
string (
defaultValue: "`pwd`/tmp/_inst",
description: 'If attempting a "make install" check in this run, what DESTDIR to specify? (absolute path, defaults to "BUILD_DIR/tmp/_inst")',
name: 'USE_TEST_INSTALL_DESTDIR')
booleanParam (
defaultValue: true,
description: 'Attempt "cppcheck" analysis before this run? (Note: corresponding tools are required in the build environment)',
name: 'DO_CPPCHECK')
booleanParam (
defaultValue: true,
description: 'Require that there are no files not discovered changed/untracked via .gitignore after builds and tests?',
name: 'REQUIRE_GOOD_GITIGNORE')
string (
defaultValue: "30",
description: 'When running tests, use this timeout (in minutes; be sure to leave enough for double-job of a distcheck too)',
name: 'USE_TEST_TIMEOUT')
booleanParam (
defaultValue: true,
description: 'When using temporary subdirs in build/test workspaces, wipe them after successful builds?',
name: 'DO_CLEANUP_AFTER_BUILD')
}
triggers {
pollSCM 'H/2 * * * *'
}
// Note: your Jenkins setup may benefit from similar setup on side of agents:
// PATH="/usr/lib64/ccache:/usr/lib/ccache:/usr/bin:/bin:${PATH}"
stages {
stage ('prepare') {
steps {
dir("tmp") {
sh 'if [ -s Makefile ]; then make -k distclean || true ; fi'
sh 'chmod -R u+w .'
deleteDir()
}
sh './autogen.sh'
stash (name: 'prepped', includes: '**/*', excludes: '**/cppcheck.xml')
}
}
stage ('compile') {
parallel {
stage ('build with DRAFT') {
when { expression { return ( params.DO_BUILD_WITH_DRAFT_API ) } }
steps {
dir("tmp/build-withDRAFT") {
deleteDir()
unstash 'prepped'
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; ./configure --enable-drafts=yes --with-docs=no'
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; make -k -j4 || make'
sh 'echo "Are GitIgnores good after make with drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
stash (name: 'built-draft', includes: '**/*', excludes: '**/cppcheck.xml')
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('build without DRAFT') {
when { expression { return ( params.DO_BUILD_WITHOUT_DRAFT_API ) } }
steps {
dir("tmp/build-withoutDRAFT") {
deleteDir()
unstash 'prepped'
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; ./configure --enable-drafts=no --with-docs=no'
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; make -k -j4 || make'
sh 'echo "Are GitIgnores good after make without drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
stash (name: 'built-nondraft', includes: '**/*', excludes: '**/cppcheck.xml')
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('build with DOCS') {
when { expression { return ( params.DO_BUILD_DOCS || params.DO_DIST_DOCS ) } }
steps {
dir("tmp/build-DOCS") {
deleteDir()
unstash 'prepped'
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; ./configure --enable-drafts=yes --with-docs=yes'
script {
if ( params.DO_DIST_DOCS ) {
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; make dist-gzip || exit ; DISTFILE="`ls -1tc *.tar.gz | head -1`" && [ -n "$DISTFILE" ] && [ -s "$DISTFILE" ] || exit ; mv -f "$DISTFILE" __dist.tar.gz'
archiveArtifacts artifacts: '__dist.tar.gz'
sh "rm -f __dist.tar.gz"
}
}
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; make -k -j4 || make'
sh 'echo "Are GitIgnores good after make with docs? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
stash (name: 'built-docs', includes: '**/*', excludes: '**/cppcheck.xml')
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
}
}
stage ('check') {
parallel {
stage ('cppcheck') {
when { expression { return ( params.DO_CPPCHECK ) } }
steps {
dir("tmp/test-cppcheck") {
deleteDir()
unstash 'prepped'
sh 'cppcheck --std=c++11 --enable=all --inconclusive --xml --xml-version=2 . 2>cppcheck.xml'
archiveArtifacts artifacts: '**/cppcheck.xml'
sh 'rm -f cppcheck.xml'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('check with DRAFT') {
when { expression { return ( params.DO_BUILD_WITH_DRAFT_API && params.DO_TEST_CHECK ) } }
steps {
dir("tmp/test-check-withDRAFT") {
deleteDir()
unstash 'built-draft'
script {
def RETRY_NUMBER = 0
retry(3) {
RETRY_NUMBER++
timeout (time: "${params.USE_TEST_TIMEOUT}".toInteger(), unit: 'MINUTES') {
try {
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; LD_LIBRARY_PATH="`pwd`/src/.libs:$LD_LIBRARY_PATH"; export LD_LIBRARY_PATH; make LD_LIBRARY_PATH="$LD_LIBRARY_PATH" check'
}
catch (Exception e) {
currentBuild.result = 'UNSTABLE' // Jenkins should not let the verdict "improve"
sh """D="`pwd`"; B="`basename "\$D"`" ; [ "${RETRY_NUMBER}" -gt 0 ] && T="_try-${RETRY_NUMBER}" || T="" ; tar czf "test-suite_${BUILD_TAG}_\${B}\${T}.tar.gz" `find . -name '*.trs'` `find . -name '*.log'`"""
archiveArtifacts artifacts: "**/test-suite*.tar.gz", allowEmpty: true
throw e
}
}
}
}
sh 'echo "Are GitIgnores good after make check with drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('check without DRAFT') {
when { expression { return ( params.DO_BUILD_WITHOUT_DRAFT_API && params.DO_TEST_CHECK ) } }
steps {
dir("tmp/test-check-withoutDRAFT") {
deleteDir()
unstash 'built-nondraft'
script {
def RETRY_NUMBER = 0
retry(3) {
RETRY_NUMBER++
timeout (time: "${params.USE_TEST_TIMEOUT}".toInteger(), unit: 'MINUTES') {
try {
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; LD_LIBRARY_PATH="`pwd`/src/.libs:$LD_LIBRARY_PATH"; export LD_LIBRARY_PATH; make LD_LIBRARY_PATH="$LD_LIBRARY_PATH" check'
}
catch (Exception e) {
currentBuild.result = 'UNSTABLE' // Jenkins should not let the verdict "improve"
sh """D="`pwd`"; B="`basename "\$D"`" ; [ "${RETRY_NUMBER}" -gt 0 ] && T="_try-${RETRY_NUMBER}" || T="" ; tar czf "test-suite_${BUILD_TAG}_\${B}\${T}.tar.gz" `find . -name '*.trs'` `find . -name '*.log'`"""
archiveArtifacts artifacts: "**/test-suite*.tar.gz", allowEmpty: true
throw e
}
}
}
}
sh 'echo "Are GitIgnores good after make check without drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('memcheck with DRAFT') {
when { expression { return ( params.DO_BUILD_WITH_DRAFT_API && params.DO_TEST_MEMCHECK ) } }
steps {
dir("tmp/test-memcheck-withDRAFT") {
deleteDir()
unstash 'built-draft'
script {
def RETRY_NUMBER = 0
retry(3) {
RETRY_NUMBER++
timeout (time: "${params.USE_TEST_TIMEOUT}".toInteger(), unit: 'MINUTES') {
try {
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; LD_LIBRARY_PATH="`pwd`/src/.libs:$LD_LIBRARY_PATH"; export LD_LIBRARY_PATH; make LD_LIBRARY_PATH="$LD_LIBRARY_PATH" memcheck && exit 0 ; echo "Re-running failed ($?) memcheck with greater verbosity" >&2 ; make LD_LIBRARY_PATH="$LD_LIBRARY_PATH" VERBOSE=1 memcheck-verbose'
}
catch (Exception e) {
currentBuild.result = 'UNSTABLE' // Jenkins should not let the verdict "improve"
sh """D="`pwd`"; B="`basename "\$D"`" ; [ "${RETRY_NUMBER}" -gt 0 ] && T="_try-${RETRY_NUMBER}" || T="" ; tar czf "test-suite_${BUILD_TAG}_\${B}\${T}.tar.gz" `find . -name '*.trs'` `find . -name '*.log'`"""
archiveArtifacts artifacts: "**/test-suite*.tar.gz", allowEmpty: true
throw e
}
}
}
}
sh 'echo "Are GitIgnores good after make memcheck with drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('memcheck without DRAFT') {
when { expression { return ( params.DO_BUILD_WITHOUT_DRAFT_API && params.DO_TEST_MEMCHECK ) } }
steps {
dir("tmp/test-memcheck-withoutDRAFT") {
deleteDir()
unstash 'built-nondraft'
script {
def RETRY_NUMBER = 0
retry(3) {
RETRY_NUMBER++
timeout (time: "${params.USE_TEST_TIMEOUT}".toInteger(), unit: 'MINUTES') {
try {
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; LD_LIBRARY_PATH="`pwd`/src/.libs:$LD_LIBRARY_PATH"; export LD_LIBRARY_PATH; make LD_LIBRARY_PATH="$LD_LIBRARY_PATH" memcheck && exit 0 ; echo "Re-running failed ($?) memcheck with greater verbosity" >&2 ; make LD_LIBRARY_PATH="$LD_LIBRARY_PATH" VERBOSE=1 memcheck-verbose'
}
catch (Exception e) {
currentBuild.result = 'UNSTABLE' // Jenkins should not let the verdict "improve"
sh """D="`pwd`"; B="`basename "\$D"`" ; [ "${RETRY_NUMBER}" -gt 0 ] && T="_try-${RETRY_NUMBER}" || T="" ; tar czf "test-suite_${BUILD_TAG}_\${B}\${T}.tar.gz" `find . -name '*.trs'` `find . -name '*.log'`"""
archiveArtifacts artifacts: "**/test-suite*.tar.gz", allowEmpty: true
throw e
}
}
}
}
sh 'echo "Are GitIgnores good after make memcheck without drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('distcheck with DRAFT') {
when { expression { return ( params.DO_BUILD_WITH_DRAFT_API && params.DO_TEST_DISTCHECK ) } }
steps {
dir("tmp/test-distcheck-withDRAFT") {
deleteDir()
unstash 'built-draft'
script {
def RETRY_NUMBER = 0
retry(3) {
RETRY_NUMBER++
timeout (time: "${params.USE_TEST_TIMEOUT}".toInteger(), unit: 'MINUTES') {
try {
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; LD_LIBRARY_PATH="`pwd`/src/.libs:$LD_LIBRARY_PATH"; export LD_LIBRARY_PATH; DISTCHECK_CONFIGURE_FLAGS="--enable-drafts=yes --with-docs=no" ; export DISTCHECK_CONFIGURE_FLAGS; make DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS" LD_LIBRARY_PATH="$LD_LIBRARY_PATH" distcheck'
}
catch (Exception e) {
currentBuild.result = 'UNSTABLE' // Jenkins should not let the verdict "improve"
sh """D="`pwd`"; B="`basename "\$D"`" ; [ "${RETRY_NUMBER}" -gt 0 ] && T="_try-${RETRY_NUMBER}" || T="" ; tar czf "test-suite_${BUILD_TAG}_\${B}\${T}.tar.gz" `find . -name '*.trs'` `find . -name '*.log'`"""
archiveArtifacts artifacts: "**/test-suite*.tar.gz", allowEmpty: true
throw e
}
}
}
}
sh 'echo "Are GitIgnores good after make distcheck with drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('distcheck without DRAFT') {
when { expression { return ( params.DO_BUILD_WITHOUT_DRAFT_API && params.DO_TEST_DISTCHECK ) } }
steps {
dir("tmp/test-distcheck-withoutDRAFT") {
deleteDir()
unstash 'built-nondraft'
script {
def RETRY_NUMBER = 0
retry(3) {
RETRY_NUMBER++
timeout (time: "${params.USE_TEST_TIMEOUT}".toInteger(), unit: 'MINUTES') {
try {
sh 'CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; LD_LIBRARY_PATH="`pwd`/src/.libs:$LD_LIBRARY_PATH"; export LD_LIBRARY_PATH; DISTCHECK_CONFIGURE_FLAGS="--enable-drafts=no --with-docs=no" ; export DISTCHECK_CONFIGURE_FLAGS; make DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS" LD_LIBRARY_PATH="$LD_LIBRARY_PATH" distcheck'
}
catch (Exception e) {
currentBuild.result = 'UNSTABLE' // Jenkins should not let the verdict "improve"
sh """D="`pwd`"; B="`basename "\$D"`" ; [ "${RETRY_NUMBER}" -gt 0 ] && T="_try-${RETRY_NUMBER}" || T="" ; tar czf "test-suite_${BUILD_TAG}_\${B}\${T}.tar.gz" `find . -name '*.trs'` `find . -name '*.log'`"""
archiveArtifacts artifacts: "**/test-suite*.tar.gz", allowEmpty: true
throw e
}
}
}
}
sh 'echo "Are GitIgnores good after make distcheck without drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('install with DRAFT') {
when { expression { return ( params.DO_BUILD_WITH_DRAFT_API && params.DO_TEST_INSTALL ) } }
steps {
dir("tmp/test-install-withDRAFT") {
deleteDir()
unstash 'built-draft'
retry(3) {
timeout (time: "${params.USE_TEST_TIMEOUT}".toInteger(), unit: 'MINUTES') {
sh """CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; LD_LIBRARY_PATH="`pwd`/src/.libs:\${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH; make LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}" DESTDIR="${params.USE_TEST_INSTALL_DESTDIR}/withDRAFT" install"""
}
}
sh """cd "${params.USE_TEST_INSTALL_DESTDIR}/withDRAFT" && find . -ls"""
sh 'echo "Are GitIgnores good after make install with drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('install without DRAFT') {
when { expression { return ( params.DO_BUILD_WITHOUT_DRAFT_API && params.DO_TEST_INSTALL ) } }
steps {
dir("tmp/test-install-withoutDRAFT") {
deleteDir()
unstash 'built-nondraft'
retry(3) {
timeout (time: "${params.USE_TEST_TIMEOUT}".toInteger(), unit: 'MINUTES') {
sh """CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; LD_LIBRARY_PATH="`pwd`/src/.libs:\${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH; make LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}" DESTDIR="${params.USE_TEST_INSTALL_DESTDIR}/withoutDRAFT" install"""
}
}
sh """cd "${params.USE_TEST_INSTALL_DESTDIR}/withoutDRAFT" && find . -ls"""
sh 'echo "Are GitIgnores good after make install without drafts? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
stage ('install with DOCS') {
when { expression { return ( params.DO_BUILD_DOCS && params.DO_TEST_INSTALL ) } }
steps {
dir("tmp/test-install-withDOCS") {
deleteDir()
unstash 'built-docs'
retry(3) {
timeout (time: "${params.USE_TEST_TIMEOUT}".toInteger(), unit: 'MINUTES') {
sh """CCACHE_BASEDIR="`pwd`" ; export CCACHE_BASEDIR; LD_LIBRARY_PATH="`pwd`/src/.libs:\${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH; make LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}" DESTDIR="${params.USE_TEST_INSTALL_DESTDIR}/withDOCS" install"""
}
}
sh """cd "${params.USE_TEST_INSTALL_DESTDIR}/withDOCS" && find . -ls"""
sh 'echo "Are GitIgnores good after make install with Docs? (should have no output below)"; git status -s || if [ "${params.REQUIRE_GOOD_GITIGNORE}" = false ]; then echo "WARNING GitIgnore tests found newly changed or untracked files" >&2 ; exit 0 ; else echo "FAILED GitIgnore tests" >&2 ; exit 1; fi'
script {
if ( params.DO_CLEANUP_AFTER_BUILD ) {
deleteDir()
}
}
}
}
}
}
}
stage ('deploy if appropriate') {
steps {
script {
def myDEPLOY_JOB_NAME = sh(returnStdout: true, script: """echo "${params["DEPLOY_JOB_NAME"]}" """).trim();
def myDEPLOY_BRANCH_PATTERN = sh(returnStdout: true, script: """echo "${params["DEPLOY_BRANCH_PATTERN"]}" """).trim();
def myDEPLOY_REPORT_RESULT = sh(returnStdout: true, script: """echo "${params["DEPLOY_REPORT_RESULT"]}" """).trim().toBoolean();
echo "Original: DEPLOY_JOB_NAME : ${params["DEPLOY_JOB_NAME"]} DEPLOY_BRANCH_PATTERN : ${params["DEPLOY_BRANCH_PATTERN"]} DEPLOY_REPORT_RESULT : ${params["DEPLOY_REPORT_RESULT"]}"
echo "Used: myDEPLOY_JOB_NAME:${myDEPLOY_JOB_NAME} myDEPLOY_BRANCH_PATTERN:${myDEPLOY_BRANCH_PATTERN} myDEPLOY_REPORT_RESULT:${myDEPLOY_REPORT_RESULT}"
if ( (myDEPLOY_JOB_NAME != "") && (myDEPLOY_BRANCH_PATTERN != "") ) {
if ( env.BRANCH_NAME =~ myDEPLOY_BRANCH_PATTERN ) {
def GIT_URL = sh(returnStdout: true, script: """git remote -v | grep -E '^origin' | awk '{print \$2}' | head -1""").trim()
def GIT_COMMIT = sh(returnStdout: true, script: 'git rev-parse --verify HEAD').trim()
def DIST_ARCHIVE = ""
if ( params.DO_DIST_DOCS ) { DIST_ARCHIVE = env.BUILD_URL + "artifact/__dist.tar.gz" }
build job: "${myDEPLOY_JOB_NAME}", parameters: [
string(name: 'DEPLOY_GIT_URL', value: "${GIT_URL}"),
string(name: 'DEPLOY_GIT_BRANCH', value: env.BRANCH_NAME),
string(name: 'DEPLOY_GIT_COMMIT', value: "${GIT_COMMIT}"),
string(name: 'DEPLOY_DIST_ARCHIVE', value: "${DIST_ARCHIVE}")
], quietPeriod: 0, wait: myDEPLOY_REPORT_RESULT, propagate: myDEPLOY_REPORT_RESULT
} else {
echo "Not deploying because branch '${env.BRANCH_NAME}' did not match filter '${myDEPLOY_BRANCH_PATTERN}'"
}
} else {
echo "Not deploying because deploy-job parameters are not set"
}
}
}
}
}
post {
success {
script {
if (currentBuild.getPreviousBuild()?.result != 'SUCCESS') {
// Uncomment desired notification
//slackSend (color: "#008800", message: "Build ${env.JOB_NAME} is back to normal.")
//emailext (to: "qa@example.com", subject: "Build ${env.JOB_NAME} is back to normal.", body: "Build ${env.JOB_NAME} is back to normal.")
}
}
}
failure {
// Uncomment desired notification
// Section must not be empty, you can delete the sleep once you set notification
sleep 1
//slackSend (color: "#AA0000", message: "Build ${env.BUILD_NUMBER} of ${env.JOB_NAME} ${currentBuild.result} (<${env.BUILD_URL}|Open>)")
//emailext (to: "qa@example.com", subject: "Build ${env.JOB_NAME} failed!", body: "Build ${env.BUILD_NUMBER} of ${env.JOB_NAME} ${currentBuild.result}\nSee ${env.BUILD_URL}")
}
}
}

373
LICENSE
View File

@ -1,373 +0,0 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

56
MAINTAINERS Normal file
View File

@ -0,0 +1,56 @@
Component: Atomic Operations
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: Lock-free Algorithms
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: TCP transport
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: IPC transport
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: PGM transport
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: In-process transport
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: I/O Threads
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: Application Threads and Differnet Socket Types
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: Multiplexing (zmq_poll)
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: Generic Infrastructure (context, mailbox, command, pipe)
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: Documentation
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: Autotools build system
Maintainer: Mikko Koppanen
Contact: mikko.koppanen@gmail.com
Component: MSVC build system
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com
Component: Performance tests
Maintainer: Martin Sustrik
Contact: sustrik@250bpm.com

1530
Makefile.am Executable file → Normal file

File diff suppressed because it is too large Load Diff

1724
NEWS

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +0,0 @@
libzmq-cygwin
=============
Definitive build fixes for cygwin (See https://github.com/zeromq/pyzmq/issues/113 for partial solution)
What's changed:
./Makefile.am Add cygwin-specific target mostly the same as mingw
./configure.ac Add cygwin-specific target mostly the same as mingw
./tests/testutil.hpp Lengthen socket timeout to 121 seconds
What's new:
./README.cygwin.md This file
./builds/cygwin Folder for cygwin-specific build files
./builds/cygwin/Makefile.cygwin Makefile for cygwin targets

View File

@ -1,48 +0,0 @@
## Overview
The ZeroMQ lightweight messaging kernel is a library which extends the
standard socket interfaces with features traditionally provided by
specialised messaging middleware products. ZeroMQ sockets provide an
abstraction of asynchronous message queues, multiple messaging patterns,
message filtering (subscriptions), seamless access to multiple transport
protocols and more.
This documentation describes the internal software that makes up the
ZeroMQ C++ core engine, and not how to use its API, however it may help
you understand certain aspects better, such as the callgraph of an API method.
There are no instructions on using ZeroMQ within this documentation, only
the API internals that make up the software.
**Note:** this documentation is generated directly from the source code with
Doxygen. Since this project is constantly under active development, what you
are about to read may be out of date! If you notice any errors in the
documentation, or the code comments, then please send a pull request.
Please refer to the README file for anything else.
## Resources
Extensive documentation is provided with the distribution. Refer to
doc/zmq.html, or "man zmq" after you have installed libzmq on your system.
* Website: http://www.zeromq.org/
* Official API documentation: http://api.zeromq.org/
Development mailing list: zeromq-dev@lists.zeromq.org
Announcements mailing list: zeromq-announce@lists.zeromq.org
Git repository: http://github.com/zeromq/libzmq
ZeroMQ developers can also be found on the IRC channel \#zeromq, on the
Freenode network (irc.freenode.net).
## Copyright
Copyright (c) 2007-2016 Contributors as noted in the AUTHORS file.
The project license is specified in LICENSE.
The names "ØMQ", "ZeroMQ", "0MQ", and the ØMQ logo are registered trademarks
of iMatix Corporation ("iMatix") and refers to either (a) the original libzmq
C++ library, or (b) the community of projects hosted in the
https://github.com/zeromq organization.
This Doxygen configuration is adapted by Hiten Pandya, for the ZeroMQ project.

188
README.md
View File

@ -1,184 +1,25 @@
# ZeroMQ
[![Build Status](https://github.com/zeromq/libzmq/actions/workflows/CI.yaml/badge.svg)](https://github.com/zeromq/libzmq/actions/workflows/CI.yaml)
[![Build status](https://ci.appveyor.com/api/projects/status/e2ks424yrs1un3wt?svg=true)](https://ci.appveyor.com/project/zeromq/libzmq)
[![Coverage Status](https://coveralls.io/repos/github/zeromq/libzmq/badge.svg?branch=master)](https://coveralls.io/github/zeromq/libzmq?branch=master)
[![Conan Center](https://shields.io/conan/v/zeromq)](https://conan.io/center/zeromq)
[![Build Status](https://travis-ci.org/zeromq/libzmq.png?branch=master)](https://travis-ci.org/zeromq/libzmq)
## Welcome
The ZeroMQ lightweight messaging kernel is a library which extends the
The 0MQ lightweight messaging kernel is a library which extends the
standard socket interfaces with features traditionally provided by
specialised messaging middleware products. ZeroMQ sockets provide an
specialised messaging middleware products. 0MQ sockets provide an
abstraction of asynchronous message queues, multiple messaging patterns,
message filtering (subscriptions), seamless access to multiple transport
protocols and more.
## Supported platforms <a name="#platforms"/>
Libzmq is mainly written in C++98 with some optional C++11-fragments. For
configuration either autotools or CMake is employed. See below for some lists
of platforms, where libzmq has been successfully compiled on.
## Building and installation
### Supported platforms with primary CI
| OS and version | Architecture | Compiler and version | Build system | Remarks |
|----------------------------------------|-------------------------|-------------------------------|--------------|---------------------------------------------------------------------------------------------------------------------------------------|
| Android NDK r25 | arm, arm64, x86, x86_64 | llvm (see NDK) | autotools | DRAFT |
| Ubuntu 14.04.5 LTS (trusty) | amd64 | clang 5.0.0 | autotools | STABLE, extras: GSSAPI, PGM, NORM, C++98 mode only |
| Ubuntu 14.04.5 LTS (trusty) | amd64 | gcc 4.8.4 | autotools | STABLE, DRAFT, extras: GSSAPI, PGM, NORM, TIPC, IPV6, also POLLER=poll, POLLER=select, also valgrind and address sanitizer executions |
| Ubuntu 14.04.5 LTS (trusty) | amd64 | gcc 4.8.4 | CMake 3.12.2 | STABLE |
| Windows Server 2012 R2 | x86 | Visual Studio 2008 | CMake 3.12.2 | DRAFT |
| Windows Server 2012 R2 | x86 | Visual Studio 2010 SP1 | CMake 3.12.2 | DRAFT |
| Windows Server 2012 R2 | x86 | Visual Studio 2012 Update 5 | CMake 3.12.2 | DRAFT |
| Windows Server 2012 R2 | x86, amd64 | Visual Studio 2013 Update 5 | CMake 3.12.2 | DRAFT, STABLE (x86 Release only), also POLLER=epoll |
| Windows Server 2012 R2 | x86 | Visual Studio 2015 Update 3 | CMake 3.12.2 | DRAFT |
| Windows Server 2016 | x86 | Visual Studio 2017 15.9.6 | CMake 3.13.3 | DRAFT |
| cygwin 3.0.0 on Windows Server 2012 R2 | amd64 | gcc 7.4.0 | CMake 3.6.2 | DRAFT |
| MSYS2 ? on Windows Server 2012 R2 | amd64 | gcc 6.4.0 | CMake ? | DRAFT |
| Mac OS X 10.13 | amd64 | Xcode 9.4.1, Apple LLVM 9.1.0 | autotools | STABLE, DRAFT |
| Mac OS X 10.13 | amd64 | Xcode 9.4.1, Apple LLVM 9.1.0 | CMake 3.11.4 | DRAFT |
Note: the platforms are regularly updated by the service providers, so this information might get out of date
without any changes on the side of libzmq. For Appveyor, refer to https://www.appveyor.com/updates/ regarding
platform updates. For travis-ci, refer to https://changelog.travis-ci.com/ regarding platform updates.
### Supported platforms with secondary CI
| OS and version | Architecture | Compiler and version | Build system | Remarks |
|------------------------------|----------------------------|----------------------|--------------|---------|
| CentOS 6 | x86, amd64 | ? | autotools | |
| CentOS 7 | amd64 | ? | autotools | |
| Debian 8.0 | x86, amd64 | ? | autotools | |
| Debian 9.0 | ARM64, x86, amd64 | ? | autotools | |
| Fedora 28 | ARM64, ARM32, amd64 | ? | autotools | |
| Fedora 29 | ARM64, ARM32, amd64 | ? | autotools | |
| Fedora Rawhide | ARM64, ARM32, amd64 | ? | autotools | |
| RedHat Enterprise Linux 7 | amd64, ppc64 | ? | autotools | |
| SuSE Linux Enterprise 12 SP4 | ARM64, amd64, ppc64, s390x | ? | autotools | |
| SuSE Linux Enterprise 15 | amd64 | ? | autotools | |
| xUbuntu 12.04 | x86, amd64 | ? | autotools | |
| xUbuntu 14.04 | x86, amd64 | ? | autotools | |
| xUbuntu 16.04 | x86, amd64 | ? | autotools | |
| xUbuntu 18.04 | x86, amd64 | ? | autotools | |
| xUbuntu 18.10 | x86, amd64 | ? | autotools | |
### Supported platforms with known active users
At the time of writing, no explicit reports have been available. Please report your experiences by opening a PR
adding an entry or moving an entry from the section below.
Under "last report", please name either the SHA1 in case of an unreleased version, or the version number in
case of a released version.
| OS and version | Architecture | Compiler and version | Build system | Last report | Remarks |
|----------------|-------------------|----------------------|--------------|-------------------------|---------|
| Solaris 10 | x86, amd64, sparc | GCC 8.1.0 | CMake | 2019/03/18 | |
| DragonFly BSD | amd64 | gcc 8.3 | autotools | 2018/08/07 git-72854e63 | |
| IBM i | ppc64 | gcc 6.3 | autotools | 2019/10/02 git-25320a3 | |
| QNX 7.0 | x86_64 | gcc 5.4.0 | CMake | 4.3.2 | |
| Windows 10 | ARM64 | Visual Studio 2019 | CMake | 2021/11/15 git-2375ca8b | |
| Windows 10 | ARM64 | clang | CMake | 2021/11/15 git-2375ca8b | |
### Supported platforms without known active users
Note: this list is incomplete and inaccurate and still needs some work.
| OS and version | Architecture | Compiler and version | Build system | Remarks |
|------------------------|--------------|--------------------------|------------------|---------|
| Any Linux distribution | x86, amd64 | gcc ?+, clang ?+, icc ?+ | autotools, CMake | |
| SunOS, Solaris | x86, amd64 | SunPro | autotools, CMake | |
| GNU/kFreeBSD | ? | ? | autotools, CMake | |
| FreeBSD | ? | ? | autotools, CMake | |
| NetBSD | ? | ? | autotools, CMake | |
| OpenBSD | ? | ? | autotools, CMake | |
| DragonFly BSD | amd64 | gcc 8.3 | autotools, CMake | |
| HP-UX | ? | ? | autotools, CMake | |
| GNU/Hurd | ? | ? | autotools | |
| VxWorks 6.8 | ? | ? | ? | |
| Windows CE | ? | ? | ? | |
| Windows UWP | ? | ? | ? | |
| OpenVMS | ? | ? | ? | |
### Unsupported platforms
| OS and version | Architecture | Compiler and version | Remarks |
|----------------|--------------|----------------------|-------------------------------------------------------------------------|
| QNX 6.3 | ? | gcc 3.3.5 | see #3371, support was added by a user, but not contributed to upstream |
For more details, see [here](SupportedPlatforms.md).
For some platforms (Linux, Mac OS X), [prebuilt binary packages are supplied by the ZeroMQ organization](#installation).
For other platforms, you need to [build your own binaries](#build).
## Installation of binary packages <a name="installation"/>
### Linux
For Linux users, pre-built binary packages are available for most distributions.
Note that DRAFT APIs can change at any time without warning, pick a STABLE build to
avoid having them enabled.
#### Latest releases
##### DEB
[![OBS release stable](https://img.shields.io/badge/OBS%20master-stable-yellow.svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%3Azeromq%3Arelease-stable&package=libzmq3-dev)
[![OBS release draft](https://img.shields.io/badge/OBS%20master-draft-yellow.svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%3Azeromq%3Arelease-draft&package=libzmq3-dev)
##### RPM
[![OBS release stable](https://img.shields.io/badge/OBS%20master-stable-yellow.svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%3Azeromq%3Arelease-stable&package=zeromq-devel)
[![OBS release draft](https://img.shields.io/badge/OBS%20master-draft-yellow.svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%3Azeromq%3Arelease-draft&package=zeromq-devel)
#### Bleeding edge packages
##### DEB
[![OBS release stable](https://img.shields.io/badge/OBS%20master-stable-yellow.svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%3Azeromq%3Agit-stable&package=libzmq3-dev)
[![OBS release draft](https://img.shields.io/badge/OBS%20master-draft-yellow.svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%3Azeromq%3Agit-draft&package=libzmq3-dev)
##### RPM
[![OBS release stable](https://img.shields.io/badge/OBS%20master-stable-yellow.svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%3Azeromq%3Agit-stable&package=zeromq-devel)
[![OBS release draft](https://img.shields.io/badge/OBS%20master-draft-yellow.svg)](http://software.opensuse.org/download.html?project=network%3Amessaging%3Azeromq%3Agit-draft&package=zeromq-devel)
#### Example: Debian 9 latest release, no DRAFT apis
echo "deb http://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/Debian_9.0/ ./" >> /etc/apt/sources.list
wget https://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/Debian_9.0/Release.key -O- | sudo apt-key add
apt-get install libzmq3-dev
### OSX
For OSX users, packages are available via brew.
brew install zeromq
## Installation of package manager <a name="package manager"/>
### vcpkg
vcpkg is a full platform package manager, you can easily install libzmq via vcpkg.
git clone https://github.com/microsoft/vcpkg.git
./bootstrap-vcpkg.bat # For powershell
./bootstrap-vcpkg.sh # For bash
./vcpkg install zeromq
## Build from sources <a name="build"/>
To build from sources, see the INSTALL file included with the distribution.
### Android
To build from source, see [README](./builds/android/README.md) file in the
android build directory.
See the INSTALL file included with the distribution.
## Resources
Extensive documentation is provided with the distribution. Refer to
doc/zmq.html, or "man zmq" after you have installed libzmq on your system.
doc/zmq.html, or "man zmq" after you have installed 0MQ on your system.
Website: http://www.zeromq.org/
@ -187,16 +28,11 @@ Announcements mailing list: zeromq-announce@lists.zeromq.org
Git repository: http://github.com/zeromq/libzmq
ZeroMQ developers can also be found on the IRC channel #zeromq, on the
Libera Chat network (irc.libera.chat).
0MQ developers can also be found on the IRC channel #zeromq, on the
Freenode network (irc.freenode.net).
## License
## Copying
The project license is specified in LICENSE.
libzmq is free software; you can redistribute it and/or modify it under
the terms of the Mozilla Public License Version 2.0.
## Contributing
This project uses [C4(Collective Code Construction Contract)](https://rfc.zeromq.org/spec:42/C4/) process for contributions.
Free use of this software is granted under the terms of the GNU Lesser General
Public License (LGPL). For details see the files `COPYING` and `COPYING.LESSER`
included with the 0MQ distribution.

View File

@ -1,319 +0,0 @@
# Security Policy
## Supported Versions
4.x versions are supported with critical and security bug fixes.
| Version | Supported |
| ------- | ------------------ |
| 4.3.x | :white_check_mark: |
| 4.2.x | :white_check_mark: |
| 4.1.x | :white_check_mark: |
| 4.0.x | :white_check_mark: |
| < 4.0 | :x: |
## Reporting a Vulnerability
If you believe a bug you found could have security implications,
please send a GPG encrypted email with the details to the maintainers:
| Maintainer | Email address | GPG fingerprint |
| ---------- | --------------- | --------------- |
| Doron Somech | somdoron@gmail.com | E0B0 E3D1 55DD 6ED6 71FB 2B79 D0B9 CC44 867D 8F3D |
| Luca Boccassi | luca.boccassi@gmail.com | A9EA 9081 724F FAE0 484C 35A1 A81C EA22 BC8C 7E2E |
## Internal severity classification
We will attempt to follow this general policy when assigning a severity to
security issues. These are guidelines more than rules, and as such end
results might vary.
| Severity | Definition |
| -------- | ---------- |
| CRITICAL | endpoints using STRONG authentication are SILENTLY affected |
| HIGH | endpoints using STRONG authentication are VISIBLY affected |
| MODERATE | endpoints NOT using STRONG authentication are SILENTLY affected |
| LOW | endpoints NOT using STRONG authentication are VISIBLY affected |
STRONG authentication means transports that use cryptography, for example CURVE
and TLS.
VISIBLY affected means that platform owners are likely to immediately notice
misbehaviours, like crashes or loss of connectivity for legitimate peers.
SILENTLY affected means that without close inspection, platform owners are
unlikely to notice misbehaviours, like remote code executions or data exfiltration.
### Public keys
<details>
<summary>Doron Somech</summary>
```
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=Qu19
-----END PGP PUBLIC KEY BLOCK-----
```
</details>
<details>
<summary>Luca Boccassi</summary>
```
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
XNBso9Rw94Z5NVIXEcH3O44UsWI=
=AXgM
-----END PGP PUBLIC KEY BLOCK-----
```
</details>

View File

@ -1,32 +0,0 @@
libzmq supports a large variety of platforms. The list of platforms can be found in the [README](README.md#platforms).
The degree to which this support is tested varies.
Platforms are currently assigned to one of the following categories:
- supported platforms with primary CI (travis-ci.org, appveyor.com): https://travis-ci.org/zeromq/libzmq, https://ci.appveyor.com/project/zeromq/libzmq
- supported platforms with secondary CI (openSUSE Build Service): https://build.opensuse.org/project/subprojects/network:messaging:zeromq
- supported platforms with known active users
- supported platforms without known active users
- unsupported platforms
Supported platforms with primary CI
- have builds and tests run for the master branch
- have builds and tests run for every pull request
- it is a precondition for merging a pull request that no builds or tests of these platforms are broken
- contributors can easily enable these builds and tests for their branches in their fork
Supported platforms with secondary CI
- have builds and tests run for the master branch
- these are monitored periodically by the project maintainers, and efforts are made to fix any broken builds or tests in a timely manner
- it is a precondition for a release that no builds or tests of these platforms are broken
Supported platforms with known active users
- have recently been reported to the maintainers (e.g. via pull requests modifying this document) as having working builds and possibly tests
Supported platforms without known active users
- have some platform-specific code within libzmq, but it is not known if it is still working
- have been reported to the maintainers as having working builds and possibly tests only significant time/changes ago
- or are assumed to work due to similarity to the above platforms
Unsupported platforms
- are either reported to be non-working for some reason that is not trivial to fix or are explicitly missing some required platform-specific code

View File

@ -7,7 +7,7 @@ AC_DEFUN([LIBZMQ_CONFIG_LIBTOOL], [{
# Libtool configuration for different targets
case "${host_os}" in
*mingw*|*cygwin*|*msys*)
*mingw32*|*cygwin*)
# Disable static build by default
AC_DISABLE_STATIC
;;
@ -88,20 +88,11 @@ dnl # LIBZMQ_CHECK_DOC_BUILD
dnl # Check whether to build documentation and install man-pages #
dnl ##############################################################################
AC_DEFUN([LIBZMQ_CHECK_DOC_BUILD], [{
# Man pages are built/installed if asciidoctor and xmlto are present
# --with-docs=no overrides this
AC_ARG_WITH([docs],
AS_HELP_STRING([--without-docs],
[Don't build and install man pages [default=build]]),
[with_docs=$withval])
# Allow user to disable doc build
AC_ARG_WITH([documentation], [AS_HELP_STRING([--without-documentation],
[Don't build and install man pages [default=build] DEPRECATED: use --without-docs])])
[disable documentation build even if asciidoc and xmlto are present [default=no]])])
if test "x$with_documentation" = "xno"; then
AC_MSG_WARN([--without-documentation is DEPRECATED and will be removed in the next release, use --without-docs])
fi
if test "x$with_docs" = "xno" || test "x$with_documentation" = "xno"; then
libzmq_build_doc="no"
libzmq_install_man="no"
else
@ -109,19 +100,20 @@ AC_DEFUN([LIBZMQ_CHECK_DOC_BUILD], [{
libzmq_build_doc="yes"
libzmq_install_man="yes"
# Check for asciidoc and xmlto and don't build the docs if these are not installed.
AC_CHECK_PROG(libzmq_have_asciidoctor, asciidoctor, yes, no)
if test "x$libzmq_have_asciidoctor" = "xno"; then
AC_CHECK_PROG(libzmq_have_asciidoc, asciidoc, yes, no)
AC_CHECK_PROG(libzmq_have_xmlto, xmlto, yes, no)
if test "x$libzmq_have_asciidoc" = "xno" -o "x$libzmq_have_xmlto" = "xno"; then
libzmq_build_doc="no"
# Tarballs built with 'make dist' ship with prebuilt documentation.
if ! test -f doc/zmq.7; then
libzmq_install_man="no"
AC_MSG_WARN([You are building an unreleased version of 0MQ and asciidoctor is not installed.])
AC_MSG_WARN([You are building an unreleased version of 0MQ and asciidoc or xmlto are not installed.])
AC_MSG_WARN([Documentation will not be built and manual pages will not be installed.])
fi
fi
# Do not install man pages if on mingw
if test "x$libzmq_on_mingw" = "xyes"; then
if test "x$libzmq_on_mingw32" = "xyes"; then
libzmq_install_man="no"
fi
fi
@ -283,7 +275,7 @@ AC_DEFUN([LIBZMQ_CHECK_ENABLE_DEBUG], [{
# This flag is checked also in
AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug],
[enable debugging information [default=disabled]])])
[Enable debugging information [default=no]])])
AC_MSG_CHECKING(whether to enable debugging information)
@ -334,7 +326,7 @@ AC_DEFUN([LIBZMQ_WITH_GCOV], [{
AC_REQUIRE([LIBZMQ_CHECK_COMPILERS])
AC_ARG_WITH(gcov, [AS_HELP_STRING([--with-gcov=yes/no],
[with GCC Code Coverage reporting.])],
[With GCC Code Coverage reporting.])],
[ZMQ_GCOV="$withval"])
AC_MSG_CHECKING(whether to enable code coverage)
@ -594,8 +586,8 @@ dnl # LIBZMQ_CHECK_SOCK_CLOEXEC([action-if-found], [action-if-not-found])
dnl # Check if SOCK_CLOEXEC is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_SOCK_CLOEXEC], [{
AC_CACHE_CHECK([whether SOCK_CLOEXEC is supported], [libzmq_cv_sock_cloexec],
[AC_TRY_RUN([/* SOCK_CLOEXEC test */
AC_MSG_CHECKING(whether SOCK_CLOEXEC is supported)
AC_TRY_RUN([/* SOCK_CLOEXEC test */
#include <sys/types.h>
#include <sys/socket.h>
@ -604,122 +596,11 @@ int main (int argc, char *argv [])
int s = socket (PF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
return (s == -1);
}
],
[libzmq_cv_sock_cloexec="yes"],
[libzmq_cv_sock_cloexec="no"],
[libzmq_cv_sock_cloexec="not during cross-compile"]
)]
],
[AC_MSG_RESULT(yes) ; libzmq_cv_sock_cloexec="yes" ; $1],
[AC_MSG_RESULT(no) ; libzmq_cv_sock_cloexec="no" ; $2],
[AC_MSG_RESULT(not during cross-compile) ; libzmq_cv_sock_cloexec="no"]
)
AS_IF([test "x$libzmq_cv_sock_cloexec" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_O_CLOEXEC([action-if-found], [action-if-not-found]) #
dnl # Check if O_CLOEXEC is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_O_CLOEXEC], [{
AC_CACHE_CHECK([whether O_CLOEXEC is supported], [libzmq_cv_o_cloexec],
[AC_TRY_RUN([/* O_CLOEXEC test */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main (int argc, char *argv [])
{
int s = open ("/dev/null", O_CLOEXEC | O_RDONLY);
return (s == -1);
}
],
[libzmq_cv_o_cloexec="yes"],
[libzmq_cv_o_cloexec="no"],
[libzmq_cv_o_cloexec="not during cross-compile"]
)]
)
AS_IF([test "x$libzmq_cv_o_cloexec" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_EVENTFD_CLOEXEC([action-if-found], [action-if-not-found]) #
dnl # Check if EFD_CLOEXEC is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_EVENTFD_CLOEXEC], [{
AC_CACHE_CHECK([whether EFD_CLOEXEC is supported], [libzmq_cv_efd_cloexec],
[AC_TRY_RUN([/* EFD_CLOEXEC test */
#include <sys/eventfd.h>
int main (int argc, char *argv [])
{
int s = eventfd (0, EFD_CLOEXEC);
return (s == -1);
}
],
[libzmq_cv_efd_cloexec="yes"],
[libzmq_cv_efd_cloexec="no"],
[libzmq_cv_efd_cloexec="not during cross-compile"]
)]
)
AS_IF([test "x$libzmq_cv_efd_cloexec" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_ATOMIC_INSTRINSICS([action-if-found], [action-if-not-found]) #
dnl # Check if compiler supoorts __atomic_Xxx intrinsics #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_ATOMIC_INTRINSICS], [{
AC_MSG_CHECKING(whether compiler supports __atomic_Xxx intrinsics)
AC_LINK_IFELSE([AC_LANG_SOURCE([
/* atomic intrinsics test */
int v = 0;
int main (int, char **)
{
int t = __atomic_add_fetch (&v, 1, __ATOMIC_ACQ_REL);
return t;
}
])],
[AC_MSG_RESULT(yes) ; GCC_ATOMIC_BUILTINS_SUPPORTED=1 libzmq_cv_has_atomic_instrisics="yes" ; $1])
if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" != x1; then
save_LIBS=$LIBS
LIBS="$LIBS -latomic"
AC_LINK_IFELSE([AC_LANG_SOURCE([
/* atomic intrinsics test */
int v = 0;
int main (int, char **)
{
int t = __atomic_add_fetch (&v, 1, __ATOMIC_ACQ_REL);
return t;
}
])],
[AC_MSG_RESULT(yes) ; libzmq_cv_has_atomic_instrisics="yes" PKGCFG_LIBS_PRIVATE="$PKGCFG_LIBS_PRIVATE -latomic" ; $1],
[AC_MSG_RESULT(no) ; libzmq_cv_has_atomic_instrisics="no" LIBS=$save_LIBS ; $2])
fi
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_SO_BINDTODEVICE([action-if-found], [action-if-not-found]) #
dnl # Check if SO_BINDTODEVICE is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_SO_BINDTODEVICE], [{
AC_CACHE_CHECK([whether SO_BINDTODEVICE is supported], [libzmq_cv_so_bindtodevice],
[AC_TRY_RUN([/* SO_BINDTODEVICE test */
#include <sys/socket.h>
int main (int argc, char *argv [])
{
/* Actually making the setsockopt() call requires CAP_NET_RAW */
#ifndef SO_BINDTODEVICE
return 1;
#else
return 0;
#endif
}
],
[libzmq_cv_so_bindtodevice="yes"],
[libzmq_cv_so_bindtodevice="no"],
[libzmq_cv_so_bindtodevice="not during cross-compile"]
)]
)
AS_IF([test "x$libzmq_cv_so_bindtodevice" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
@ -727,8 +608,8 @@ dnl # LIBZMQ_CHECK_SO_KEEPALIVE([action-if-found], [action-if-not-found])
dnl # Check if SO_KEEPALIVE is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_SO_KEEPALIVE], [{
AC_CACHE_CHECK([whether SO_KEEPALIVE is supported], [libzmq_cv_so_keepalive],
[AC_TRY_RUN([/* SO_KEEPALIVE test */
AC_MSG_CHECKING(whether SO_KEEPALIVE is supported)
AC_TRY_RUN([/* SO_KEEPALIVE test */
#include <sys/types.h>
#include <sys/socket.h>
@ -740,13 +621,11 @@ int main (int argc, char *argv [])
((rc = setsockopt (s, SOL_SOCKET, SO_KEEPALIVE, (char*) &opt, sizeof (int))) == -1)
);
}
],
[libzmq_cv_so_keepalive="yes"],
[libzmq_cv_so_keepalive="no"],
[libzmq_cv_so_keepalive="not during cross-compile"]
)]
],
[AC_MSG_RESULT(yes) ; libzmq_cv_so_keepalive="yes" ; $1],
[AC_MSG_RESULT(no) ; libzmq_cv_so_keepalive="no" ; $2],
[AC_MSG_RESULT(not during cross-compile) ; libzmq_cv_so_keepalive="no"]
)
AS_IF([test "x$libzmq_cv_so_keepalive" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
@ -754,8 +633,8 @@ dnl # LIBZMQ_CHECK_TCP_KEEPCNT([action-if-found], [action-if-not-found])
dnl # Check if TCP_KEEPCNT is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_TCP_KEEPCNT], [{
AC_CACHE_CHECK([whether TCP_KEEPCNT is supported], [libzmq_cv_tcp_keepcnt],
[AC_TRY_RUN([/* TCP_KEEPCNT test */
AC_MSG_CHECKING(whether TCP_KEEPCNT is supported)
AC_TRY_RUN([/* TCP_KEEPCNT test */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@ -770,13 +649,11 @@ int main (int argc, char *argv [])
((rc = setsockopt (s, IPPROTO_TCP, TCP_KEEPCNT, (char*) &opt, sizeof (int))) == -1)
);
}
],
[libzmq_cv_tcp_keepcnt="yes"],
[libzmq_cv_tcp_keepcnt="no"],
[libzmq_cv_tcp_keepcnt="not during cross-compile"]
)]
],
[AC_MSG_RESULT(yes) ; libzmq_cv_tcp_keepcnt="yes" ; $1],
[AC_MSG_RESULT(no) ; libzmq_cv_tcp_keepcnt="no" ; $2],
[AC_MSG_RESULT(not during cross-compile) ; libzmq_cv_tcp_keepcnt="no"]
)
AS_IF([test "x$libzmq_cv_tcp_keepcnt" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
@ -784,8 +661,8 @@ dnl # LIBZMQ_CHECK_TCP_KEEPIDLE([action-if-found], [action-if-not-found])
dnl # Check if TCP_KEEPIDLE is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_TCP_KEEPIDLE], [{
AC_CACHE_CHECK([whether TCP_KEEPIDLE is supported], [libzmq_cv_tcp_keepidle],
[AC_TRY_RUN([/* TCP_KEEPIDLE test */
AC_MSG_CHECKING(whether TCP_KEEPIDLE is supported)
AC_TRY_RUN([/* TCP_KEEPIDLE test */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@ -800,13 +677,11 @@ int main (int argc, char *argv [])
((rc = setsockopt (s, IPPROTO_TCP, TCP_KEEPIDLE, (char*) &opt, sizeof (int))) == -1)
);
}
],
[libzmq_cv_tcp_keepidle="yes"],
[libzmq_cv_tcp_keepidle="no"],
[libzmq_cv_tcp_keepidle="not during cross-compile"]
)]
],
[AC_MSG_RESULT(yes) ; libzmq_cv_tcp_keepidle="yes" ; $1],
[AC_MSG_RESULT(no) ; libzmq_cv_tcp_keepidle="no" ; $2],
[AC_MSG_RESULT(not during cross-compile) ; libzmq_cv_tcp_keepidle="no"]
)
AS_IF([test "x$libzmq_cv_tcp_keepidle" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
@ -814,8 +689,8 @@ dnl # LIBZMQ_CHECK_TCP_KEEPINTVL([action-if-found], [action-if-not-found])
dnl # Check if TCP_KEEPINTVL is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_TCP_KEEPINTVL], [{
AC_CACHE_CHECK([whether TCP_KEEPINTVL is supported], [libzmq_cv_tcp_keepintvl],
[AC_TRY_RUN([/* TCP_KEEPINTVL test */
AC_MSG_CHECKING(whether TCP_KEEPINTVL is supported)
AC_TRY_RUN([/* TCP_KEEPINTVL test */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@ -830,13 +705,11 @@ int main (int argc, char *argv [])
((rc = setsockopt (s, IPPROTO_TCP, TCP_KEEPINTVL, (char*) &opt, sizeof (int))) == -1)
);
}
],
[libzmq_cv_tcp_keepintvl="yes"],
[libzmq_cv_tcp_keepintvl="no"],
[libzmq_cv_tcp_keepintvl="not during cross-compile"]
)]
],
[AC_MSG_RESULT(yes) ; libzmq_cv_tcp_keepintvl="yes" ; $1],
[AC_MSG_RESULT(no) ; libzmq_cv_tcp_keepintvl="no" ; $2],
[AC_MSG_RESULT(not during cross-compile) ; libzmq_cv_tcp_keepintvl="no"]
)
AS_IF([test "x$libzmq_cv_tcp_keepintvl" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
@ -844,8 +717,8 @@ dnl # LIBZMQ_CHECK_TCP_KEEPALIVE([action-if-found], [action-if-not-found])
dnl # Check if TCP_KEEPALIVE is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_TCP_KEEPALIVE], [{
AC_CACHE_CHECK([whether TCP_KEEPALIVE is supported], [libzmq_cv_tcp_keepalive],
[AC_TRY_RUN([/* TCP_KEEPALIVE test */
AC_MSG_CHECKING(whether TCP_KEEPALIVE is supported)
AC_TRY_RUN([/* TCP_KEEPALIVE test */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@ -860,64 +733,11 @@ int main (int argc, char *argv [])
((rc = setsockopt (s, IPPROTO_TCP, TCP_KEEPALIVE, (char*) &opt, sizeof (int))) == -1)
);
}
],
[libzmq_cv_tcp_keepalive="yes"],
[libzmq_cv_tcp_keepalive="no"],
[libzmq_cv_tcp_keepalive="not during cross-compile"]
)]
],
[AC_MSG_RESULT(yes) ; libzmq_cv_tcp_keepalive="yes" ; $1],
[AC_MSG_RESULT(no) ; libzmq_cv_tcp_keepalive="no" ; $2],
[AC_MSG_RESULT(not during cross-compile) ; libzmq_cv_tcp_keepalive="no"]
)
AS_IF([test "x$libzmq_cv_tcp_keepalive" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_SO_PRIORITY([action-if-found], [action-if-not-found]) #
dnl # Check if SO_PRIORITY is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_SO_PRIORITY], [{
AC_CACHE_CHECK([whether SO_PRIORITY is supported], [libzmq_cv_so_priority],
[AC_TRY_RUN([/* SO_PRIORITY test */
#include <sys/types.h>
#include <sys/socket.h>
int main (int argc, char *argv [])
{
int s, rc, opt = 1;
return (
((s = socket (PF_INET, SOCK_STREAM, 0)) == -1) ||
((rc = setsockopt (s, SOL_SOCKET, SO_PRIORITY, (char*) &opt, sizeof (int))) == -1)
);
}
],
[libzmq_cv_so_priority="yes"],
[libzmq_cv_so_priority="no"],
[libzmq_cv_so_priority="not during cross-compile"]
)]
)
AS_IF([test "x$libzmq_cv_so_priority" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_GETRANDOM([action-if-found], [action-if-not-found]) #
dnl # Checks if getrandom is supported #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_GETRANDOM], [{
AC_CACHE_CHECK([whether getrandom is supported], [libzmq_cv_getrandom],
[AC_TRY_RUN([/* thread-local storage test */
#include <sys/random.h>
int main (int argc, char *argv [])
{
char buf[4];
int rc = getrandom(buf, 4, 0);
return rc == -1 ? 1 : 0;
}
],
[libzmq_cv_getrandom="yes"],
[libzmq_cv_getrandom="no"],
[libzmq_cv_getrandom="not during cross-compile"]
)]
)
AS_IF([test "x$libzmq_cv_getrandom" = "xyes"], [$1], [$2])
}])
dnl ################################################################################
@ -925,71 +745,57 @@ dnl # LIBZMQ_CHECK_POLLER_KQUEUE([action-if-found], [action-if-not-found])
dnl # Checks kqueue polling system #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_POLLER_KQUEUE], [{
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[
#include <sys/types.h>
#include <sys/event.h>
#include <sys/time.h>
],[[
],
[[
struct kevent t_kev;
kqueue();
]])],
[$1], [$2]
)
]]
)],
[libzmq_cv_have_poller_kqueue="yes" ; $1],
[libzmq_cv_have_poller_kqueue="no" ; $2])
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_POLLER_EPOLL_RUN([action-if-found], [action-if-not-found]) #
dnl # LIBZMQ_CHECK_POLLER_EPOLL_CLOEXEC([action-if-found], [action-if-not-found]) #
dnl # Checks epoll polling system can actually run #
dnl # For cross-compile, only requires that epoll can link #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_POLLER_EPOLL], [{
AC_RUN_IFELSE([
AC_LANG_PROGRAM([
AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[
#include <sys/epoll.h>
],[[
],
[[
struct epoll_event t_ev;
int r;
r = epoll_create(10);
return(r < 0);
]])],
[$1],[$2],[
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
]]
)],
[libzmq_cv_have_poller_epoll="yes" ; $1],
[libzmq_cv_have_poller_epoll="no" ; $2],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[
#include <sys/epoll.h>
],[[
struct epoll_event t_ev;
epoll_create(10);
]])],
[$1], [$2]
)
]
)
}])
],
[[
struct epoll_event t_ev;
epoll_create(10);
]]
)],
[libzmq_cv_have_poller_epoll="yes" ; $1],
[libzmq_cv_have_poller_epoll="no" ; $2])
AC_DEFUN([LIBZMQ_CHECK_POLLER_EPOLL_CLOEXEC], [{
AC_RUN_IFELSE([
AC_LANG_PROGRAM([
#include <sys/epoll.h>
],[[
struct epoll_event t_ev;
int r;
r = epoll_create1(EPOLL_CLOEXEC);
return(r < 0);
]])],
[$1],[$2],[
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
#include <sys/epoll.h>
],[[
struct epoll_event t_ev;
epoll_create1(EPOLL_CLOEXEC);
]])],
[$1], [$2]
)
]
)
])
}])
dnl ################################################################################
@ -997,31 +803,18 @@ dnl # LIBZMQ_CHECK_POLLER_DEVPOLL([action-if-found], [action-if-not-found])
dnl # Checks devpoll polling system #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_POLLER_DEVPOLL], [{
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[
#include <sys/devpoll.h>
],[[
],
[[
struct pollfd t_devpoll;
int fd = open("/dev/poll", O_RDWR);
]])],
[$1], [$2]
)
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_POLLER_POLLSET([action-if-found], [action-if-not-found]) #
dnl # Checks pollset polling system #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_POLLER_POLLSET], [{
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
#include <sys/poll.h>
#include <sys/pollset.h>
],[[
pollset_t ps = pollset_create(-1);
]])],
[$1], [$2]
)
]]
)],
[libzmq_cv_have_poller_devpoll="yes" ; $1],
[libzmq_cv_have_poller_devpoll="no" ; $2])
}])
dnl ################################################################################
@ -1029,15 +822,18 @@ dnl # LIBZMQ_CHECK_POLLER_POLL([action-if-found], [action-if-not-found])
dnl # Checks poll polling system #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_POLLER_POLL], [{
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[
#include <poll.h>
],[[
],
[[
struct pollfd t_poll;
poll(&t_poll, 1, 1);
]])],
[$1], [$2]
)
]]
)],
[libzmq_cv_have_poller_poll="yes" ; $1],
[libzmq_cv_have_poller_poll="no" ; $2])
}])
dnl ################################################################################
@ -1045,8 +841,9 @@ dnl # LIBZMQ_CHECK_POLLER_SELECT([action-if-found], [action-if-not-found])
dnl # Checks select polling system #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_POLLER_SELECT], [{
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[
#ifdef ZMQ_HAVE_WINDOWS
#include "winsock2.h"
#elif defined ZMQ_HAVE_OPENVMS
@ -1055,256 +852,79 @@ AC_DEFUN([LIBZMQ_CHECK_POLLER_SELECT], [{
#else
#include <sys/select.h>
#endif
],[[
],
[[
fd_set t_rfds;
struct timeval tv;
FD_ZERO(&t_rfds);
FD_SET(0, &t_rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
select(1, &t_rfds, 0, 0, &tv);
]])],
[$1],[$2]
)
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_PSELECT([action-if-found], [action-if-not-found]) #
dnl # Checks pselect polling system #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_PSELECT], [{
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
#include <sys/select.h>
#include <signal.h>
],[[
fd_set t_rfds;
struct timespec ts;
FD_ZERO(&t_rfds);
FD_SET(0, &t_rfds);
ts.tv_sec = 5;
ts.tv_nsec = 0;
sigset_t sigmask, sigmask_without_sigterm;
sigemptyset(&sigmask);
sigprocmask(SIG_BLOCK, &sigmask, &sigmask_without_sigterm);
pselect(1, &t_rfds, 0, 0, &ts, &sigmask);
]])],
[$1],[$2]
)
select(1, &t_rfds, NULL, NULL, &tv);
]]
)],
[libzmq_cv_have_poller_select="yes" ; $1],
[libzmq_cv_have_poller_select="no" ; $2])
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_POLLER([action-if-found], [action-if-not-found]) #
dnl # Choose polling system #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_POLLER], [{
# Allow user to override poller autodetection
AC_ARG_WITH([poller],
[AS_HELP_STRING([--with-poller],
[choose I/O thread polling system manually. Valid values are 'kqueue', 'epoll', 'devpoll', 'pollset', 'poll', 'select', 'wepoll', or 'auto'. [default=auto]])])
# Allow user to override poller autodetection
AC_ARG_WITH([api_poller],
[AS_HELP_STRING([--with-api-poller],
[choose zmq_poll(er)_* API polling system manually. Valid values are 'poll', 'select', or 'auto'. [default=auto]])])
# Allow user to disable doc build
AC_ARG_WITH([poller], [AS_HELP_STRING([--with-poller],
[choose polling system manually. valid values are kqueue, epoll, devpoll, poll or select [default=autodetect]])])
if test "x$with_poller" = "x"; then
pollers=auto
else
pollers=$with_poller
fi
if test "$pollers" = "auto"; then
# We search for pollers in this order
pollers="kqueue epoll devpoll pollset poll select"
fi
AC_MSG_CHECKING([for suitable polling system])
# try to find suitable polling system. the order of testing is:
AC_MSG_NOTICE([Choosing I/O thread polling system from '$pollers'...])
poller_found=0
for poller in $pollers; do
case "$poller" in
kqueue)
LIBZMQ_CHECK_POLLER_KQUEUE([
AC_MSG_NOTICE([Using 'kqueue' I/O thread polling system])
AC_DEFINE(ZMQ_IOTHREAD_POLLER_USE_KQUEUE, 1, [Use 'kqueue' I/O thread polling system])
poller_found=1
])
;;
epoll)
case "$host_os" in
solaris*|sunos*)
# Recent illumos and Solaris systems did add epoll()
# syntax, but it does not fully satisfy expectations
# that ZMQ has from Linux systems. Unless you undertake
# to fix the integration, do not disable this exception
# and use select() or poll() on Solarish OSes for now.
AC_MSG_NOTICE([NOT using 'epoll' I/O thread polling system on '$host_os']) ;;
*)
LIBZMQ_CHECK_POLLER_EPOLL_CLOEXEC([
AC_MSG_NOTICE([Using 'epoll' I/O thread polling system with CLOEXEC])
AC_DEFINE(ZMQ_IOTHREAD_POLLER_USE_EPOLL, 1, [Use 'epoll' I/O thread polling system])
AC_DEFINE(ZMQ_IOTHREAD_POLLER_USE_EPOLL_CLOEXEC, 1, [Use 'epoll' I/O thread polling system with CLOEXEC])
poller_found=1
],[
LIBZMQ_CHECK_POLLER_EPOLL([
AC_MSG_NOTICE([Using 'epoll' I/O thread polling system with CLOEXEC])
AC_DEFINE(ZMQ_IOTHREAD_POLLER_USE_EPOLL, 1, [Use 'epoll' I/O thread polling system])
poller_found=1
])
])
;;
esac
;;
devpoll)
LIBZMQ_CHECK_POLLER_DEVPOLL([
AC_MSG_NOTICE([Using 'devpoll' I/O thread polling system])
AC_DEFINE(ZMQ_IOTHREAD_POLLER_USE_DEVPOLL, 1, [Use 'devpoll' I/O thread polling system])
poller_found=1
])
;;
pollset)
LIBZMQ_CHECK_POLLER_POLLSET([
AC_MSG_NOTICE([Using 'pollset' I/O thread polling system])
AC_DEFINE(ZMQ_IOTHREAD_POLLER_USE_POLLSET, 1, [Use 'pollset' I/O thread polling system])
poller_found=1
])
;;
poll)
LIBZMQ_CHECK_POLLER_POLL([
AC_MSG_NOTICE([Using 'poll' I/O thread polling system])
AC_DEFINE(ZMQ_IOTHREAD_POLLER_USE_POLL, 1, [Use 'poll' I/O thread polling system])
poller_found=1
])
;;
select)
LIBZMQ_CHECK_POLLER_SELECT([
AC_MSG_NOTICE([Using 'select' I/O thread polling system])
AC_DEFINE(ZMQ_IOTHREAD_POLLER_USE_SELECT, 1, [Use 'select' I/O thread polling system])
poller_found=1
])
;;
wepoll)
# wepoll can only be manually selected
AC_MSG_NOTICE([Using 'wepoll' I/O thread polling system])
AC_DEFINE(ZMQ_IOTHREAD_POLLER_USE_EPOLL, 1, [Use 'epoll' I/O thread polling system])
poller_found=1
;;
esac
test $poller_found -eq 1 && break
done
if test $poller_found -eq 0; then
AC_MSG_ERROR([None of '$pollers' are valid pollers on this platform])
fi
if test "x$with_api_poller" = "x"; then
with_api_poller=auto
fi
if test "x$with_api_poller" = "xauto"; then
if test $poller = "select"; then
api_poller=select
elif test $poller = "wepoll"; then
api_poller=select
else
api_poller=poll
fi
else
api_poller=$with_api_poller
fi
if test "$api_poller" = "select"; then
AC_MSG_NOTICE([Using 'select' zmq_poll(er)_* API polling system])
AC_DEFINE(ZMQ_POLL_BASED_ON_SELECT, 1, [Use 'select' zmq_poll(er)_* API polling system])
elif test "$api_poller" = "poll"; then
AC_MSG_NOTICE([Using 'poll' zmq_poll(er)_* API polling system])
AC_DEFINE(ZMQ_POLL_BASED_ON_POLL, 1, [Use 'poll' zmq_poll(er)_* API polling system])
else
AC_MSG_ERROR([Invalid API poller '$api_poller' specified])
fi
}])
dnl ################################################################################
dnl # LIBZMQ_CHECK_PPOLL([action-if-found], [action-if-not-found]) #
dnl # Check whether zmq_ppoll can be activated, and do so if it can #
dnl ################################################################################
AC_DEFUN([LIBZMQ_CHECK_PPOLL], [{
AC_REQUIRE([AC_CANONICAL_HOST])
case "${host_os}" in
*mingw*|*cygwin*|*msys*)
# Disable ppoll by default on Windows
AC_MSG_NOTICE([NOT building active zmq_ppoll on '$host_os']) ;;
*)
LIBZMQ_CHECK_PSELECT([
AC_MSG_NOTICE([Building with zmq_ppoll])
AC_DEFINE(ZMQ_HAVE_PPOLL, 1, [Build with zmq_ppoll])
])
case "${with_poller}" in
kqueue|epoll|devpoll|poll|select)
# User has chosen polling system
libzmq_cv_poller="${with_poller}"
;;
esac
}])
dnl ##############################################################################
dnl # LIBZMQ_CHECK_CACHELINE #
dnl # Check cacheline size for alignment purposes #
dnl ##############################################################################
AC_DEFUN([LIBZMQ_CHECK_CACHELINE], [{
*)
# try to find suitable polling system. the order of testing is:
# kqueue -> epoll -> devpoll -> poll -> select
for subsystem in kqueue epoll devpoll poll select; do
zmq_cacheline_size=64
AC_CHECK_TOOL(libzmq_getconf, getconf)
if ! test "x$libzmq_getconf" = "x"; then
zmq_cacheline_size=$($libzmq_getconf LEVEL1_DCACHE_LINESIZE 2>/dev/null || echo 64)
if test "x$zmq_cacheline_size" = "x0" -o "x$zmq_cacheline_size" = "x-1" -o "x$zmq_cacheline_size" = "xundefined"; then
# getconf on some architectures does not know the size, try to fallback to
# the value the kernel knows on Linux
zmq_cacheline_size=$(cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size 2>/dev/null || echo 64)
fi
fi
if test "x$zmq_cacheline_size" = "xundefined"; then
# On some platforms e.g. Fedora33 s390x the cacheline size reported
# by getconf as 'undefined'.
zmq_cacheline_size=64
fi
AC_MSG_NOTICE([Using "$zmq_cacheline_size" bytes alignment for lock-free data structures])
AC_DEFINE_UNQUOTED(ZMQ_CACHELINE_SIZE, $zmq_cacheline_size, [Using "$zmq_cacheline_size" bytes alignment for lock-free data structures])
}])
case "${subsystem}" in
kqueue)
LIBZMQ_CHECK_POLLER_KQUEUE([libzmq_cv_poller=$subsystem], [])
;;
dnl ################################################################################
dnl # LIBZMQ_CHECK_CV_IMPL([action-if-found], [action-if-not-found]) #
dnl # Choose condition variable implementation #
dnl ################################################################################
epoll)
LIBZMQ_CHECK_POLLER_EPOLL([libzmq_cv_poller=$subsystem], [])
;;
AC_DEFUN([LIBZMQ_CHECK_CV_IMPL], [{
# Allow user to override condition variable autodetection
AC_ARG_WITH([cv-impl],
[AS_HELP_STRING([--with-cv-impl],
[choose condition variable implementation manually. Valid values are 'stl11', 'pthread', 'none', or 'auto'. [default=auto]])])
devpoll)
LIBZMQ_CHECK_POLLER_DEVPOLL([libzmq_cv_poller=$subsystem], [])
;;
if test "x$with_cv_impl" = "x"; then
cv_impl=auto
else
cv_impl=$with_cv_impl
fi
case $host_os in
vxworks*)
cv_impl="vxworks"
AC_DEFINE(ZMQ_USE_CV_IMPL_VXWORKS, 1, [Use vxworks condition variable implementation.])
poll)
LIBZMQ_CHECK_POLLER_POLL([libzmq_cv_poller=$subsystem], [])
;;
select)
LIBZMQ_CHECK_POLLER_SELECT([libzmq_cv_poller=$subsystem], [])
;;
esac
if test "x${libzmq_cv_poller}" != "x"; then
break
fi
done
;;
esac
if test "$cv_impl" = "auto" || test "$cv_impl" = "stl11"; then
AC_LANG_PUSH([C++])
AC_CHECK_HEADERS(condition_variable, [stl11="yes"
AC_DEFINE(ZMQ_USE_CV_IMPL_STL11, 1, [Use stl11 condition variable implementation.])],
[stl11="no"])
AC_LANG_POP([C++])
if test "$cv_impl" = "stl11" && test "x$stl11" = "xno"; then
AC_MSG_ERROR([--with-cv-impl set to stl11 but cannot find condition_variable])
fi
fi
if test "$cv_impl" = "pthread" || test "x$stl11" = "xno"; then
AC_DEFINE(ZMQ_USE_CV_IMPL_PTHREADS, 1, [Use pthread condition variable implementation.])
fi
if test "$cv_impl" = "none"; then
AC_DEFINE(ZMQ_USE_CV_IMPL_NONE, 1, [Use no condition variable implementation.])
fi
AC_MSG_NOTICE([Using "$cv_impl" condition variable implementation.])
libzmq_cv_poller_flag=`echo "ZMQ_FORCE_${libzmq_cv_poller}" | tr a-z A-Z`
AS_IF([test "x${libzmq_cv_poller}" != "x"],
[AC_MSG_RESULT([using $libzmq_cv_poller]) ; $1], [AC_MSG_RESULT(no suitable polling system found) ; $2])
}])

View File

@ -1,328 +0,0 @@
version: build-{build}
shallow_clone: true
os: Visual Studio 2013
environment:
CMAKE_GENERATOR: "Visual Studio 12 2013"
MSVCVERSION: "v120"
MSVCYEAR: "vs2013"
ENABLE_DRAFTS: ON
matrix:
- platform: x64
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
CMAKE_GENERATOR: "Visual Studio 16 2019"
MSVCVERSION: "v142"
MSVCYEAR: "vs2019"
ARTIFACT_NAME: v142-x64
- platform: Win32
configuration: Release
WITH_LIBSODIUM: OFF # unavailable build files for VS2008
ENABLE_CURVE: OFF
CMAKE_GENERATOR: "Visual Studio 9 2008"
MSVCVERSION: "v90"
MSVCYEAR: "vs2008"
ARTIFACT_NAME: v90
- platform: Win32
configuration: Release
WITH_LIBSODIUM: OFF
ENABLE_CURVE: OFF
CMAKE_GENERATOR: "Visual Studio 10 2010"
MSVCVERSION: "v100"
MSVCYEAR: "vs2010"
ARTIFACT_NAME: v100
- platform: Win32
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
ARTIFACT_NAME: v120
- platform: x64
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
ARTIFACT_NAME: v120-x64
- platform: Win32
configuration: Release
POLLER: epoll
API_POLLER: poll
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
TEST_OPTIONS: '-E "(test_many_sockets)"'
ARTIFACT_NAME: v120-epoll
- platform: Win32
configuration: Debug
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
TEST_OPTIONS: '-E "(test_many_sockets)"'
ARTIFACT_NAME: v120-gd
- platform: x64
configuration: Debug
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
TEST_OPTIONS: '-E "(test_many_sockets)"'
ARTIFACT_NAME: v120-gd-x64
- platform: Win32
configuration: Release
WITH_LIBSODIUM: OFF
ENABLE_CURVE: OFF
ENABLE_DRAFTS: OFF
ARTIFACT_NAME: v120-nocurve
- platform: Win32
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
CMAKE_GENERATOR: "Visual Studio 14 2015"
MSVCVERSION: "v140"
MSVCYEAR: "vs2015"
ARTIFACT_NAME: v140
- platform: x64
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
CMAKE_GENERATOR: "Visual Studio 14 2015"
MSVCVERSION: "v140"
MSVCYEAR: "vs2015"
ARTIFACT_NAME: v140-x64
- platform: Win32
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMAKE_GENERATOR: "Visual Studio 15 2017"
MSVCVERSION: "v141"
MSVCYEAR: "vs2017"
TEST_OPTIONS: '-E "(test_many_sockets)"'
ARTIFACT_NAME: v141
- platform: x64
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMAKE_GENERATOR: "Visual Studio 15 2017"
MSVCVERSION: "v141"
MSVCYEAR: "vs2017"
TEST_OPTIONS: '-E "(test_many_sockets)"'
ARTIFACT_NAME: v141-x64
- platform: cygwin64
WITH_LIBSODIUM: OFF
ENABLE_CURVE: OFF
CMAKE_GENERATOR: "Unix Makefiles"
ARTIFACT_NAME: cygwin64
- platform: mingw64
WITH_LIBSODIUM: OFF
ENABLE_CURVE: OFF
CMAKE_GENERATOR: "MSYS Makefiles"
ARTIFACT_NAME: mingw64
- platform: Win32-uwp
configuration: Debug
WITH_LIBSODIUM: OFF
ENABLE_CURVE: OFF
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMAKE_GENERATOR: "Visual Studio 15 2017"
MSVCVERSION: "v141"
MSVCYEAR: "vs2017"
ARTIFACT_NAME: v141-gd-uwp
CMAKE_SYSTEM_NAME: WindowsStore
CMAKE_SYSTEM_VERSION: 10.0.18362
EXTRA_FLAGS: -DCMAKE_SYSTEM_NAME=%CMAKE_SYSTEM_NAME% -DCMAKE_SYSTEM_VERSION=%CMAKE_SYSTEM_VERSION% -DBUILD_TESTS=OFF
- platform: Win32-uwp
configuration: Release
WITH_LIBSODIUM: OFF
ENABLE_CURVE: OFF
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMAKE_GENERATOR: "Visual Studio 15 2017"
MSVCVERSION: "v141"
MSVCYEAR: "vs2017"
ARTIFACT_NAME: v141-uwp
CMAKE_SYSTEM_NAME: WindowsStore
CMAKE_SYSTEM_VERSION: 10.0.18362
EXTRA_FLAGS: -DCMAKE_SYSTEM_NAME=%CMAKE_SYSTEM_NAME% -DCMAKE_SYSTEM_VERSION=%CMAKE_SYSTEM_VERSION% -DBUILD_TESTS=OFF
matrix:
fast_finish: false
allow_failures:
- platform: cygwin64 # TODO allow failures until tests are fixed
- platform: mingw64 # TODO allow failures until tests are fixed
init:
- cmd: if "%NO_PR%"=="TRUE" (
if "%APPVEYOR_PULL_REQUEST_NUMBER%" NEQ "" (
echo "Build is disabled for PRs, aborting" &&
appveyor exit
)
)
#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
- cmake --version
- msbuild /version
- cmd: reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f
cache:
- C:\projects\libsodium
- C:\cygwin64\var\cache\setup
install:
- cmd: if "%Platform%"=="cygwin64" C:\cygwin64\setup-x86_64.exe --quiet-mode --no-shortcuts --upgrade-also --packages cmake,cygwin-devel,gcc-g++,libncurses-devel,make,pkg-config
- cmd: if "%Platform%"=="cygwin64" set PATH=C:\cygwin64\bin;%PATH%
- cmd: if "%Platform%"=="mingw64" C:\msys64\usr\bin\bash -lc "pacman -Qg"
- cmd: if "%Platform%"=="mingw64" set PATH=C:\msys64\usr\bin;%PATH%
- cmd: if "%Platform%"=="x64" (if not "%MSVCVERSION%"=="v142" set "CMAKE_GENERATOR=%CMAKE_GENERATOR% Win64")
- cmd: echo "Generator='%CMAKE_GENERATOR%'"
- cmd: echo "Platform='%Platform%'"
- cmd: if "%WITH_LIBSODIUM%"=="ON" set LIBSODIUMDIR=C:\projects\libsodium
- cmd: if "%WITH_LIBSODIUM%"=="ON" (
git config --global user.email "test@appveyor.com" &&
git config --global user.name "appveyor"
)
- cmd: if "%WITH_LIBSODIUM%"=="ON" (
if not exist "%LIBSODIUMDIR%" (
git clone --branch stable --depth 1 --quiet "https://github.com/jedisct1/libsodium.git" %LIBSODIUMDIR%
) else (
git -C "%LIBSODIUMDIR%" fetch --all && git -C "%LIBSODIUMDIR%" reset --hard origin/stable
)
)
- cmd: if "%WITH_LIBSODIUM%"=="ON" msbuild /v:minimal /maxcpucount:%NUMBER_OF_PROCESSORS% /p:Configuration=%Configuration%DLL %LIBSODIUMDIR%\builds\msvc\%MSVCYEAR%\libsodium\libsodium.vcxproj
- cmd: if "%WITH_LIBSODIUM%"=="ON" set SODIUM_LIBRARY_DIR="%LIBSODIUMDIR%\bin\%Platform%\%Configuration%\%MSVCVERSION%\dynamic"
- cmd: if "%WITH_LIBSODIUM%"=="ON" set SODIUM_INCLUDE_DIR="%LIBSODIUMDIR%\src\libsodium\include"
- ps: if (${env:WITH_LIBSODIUM} -eq "ON") { Copy-Item "C:\projects\libsodium\bin\${env:Platform}\${env:Configuration}\${env:MSVCVERSION}\dynamic\libsodium.lib" -Destination "C:\projects\libsodium\bin\${env:Platform}\${env:Configuration}\${env:MSVCVERSION}\dynamic\sodium.lib" }
clone_folder: C:\projects\libzmq
before_build:
- cmd: set LIBZMQ_SRCDIR=%cd%
- cmd: set LIBZMQ_BUILDDIR=C:\projects\build_libzmq
# TODO this does not work with sonarcloud.io, as it misses the sonar-cxx plugin
# - cmd: curl -L https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.1.0.1141-windows.zip -o sonar-scanner-cli-3.1.0.1141-windows.zip
# - cmd: unzip sonar-scanner-cli-3.1.0.1141-windows.zip
# - cmd: set BUILDLOG="%LIBZMQ_SRCDIR%\build.log"
- cmd: md "%LIBZMQ_BUILDDIR%"
- cd "%LIBZMQ_BUILDDIR%"
- cmd: if "%PLATFORM%" == "cygwin64" set APPVEYOR_BUILD_FOLDER=/cygdrive/C/projects/libzmq
- cmd: if "%ENABLE_ANALYSIS%"=="ON" ( set LIBZMQ_WERROR="OFF" ) else ( set LIBZMQ_WERROR="ON" )
- cmd: cmake -D CMAKE_INCLUDE_PATH="%SODIUM_INCLUDE_DIR%" -D CMAKE_LIBRARY_PATH="%SODIUM_LIBRARY_DIR%" -D WITH_LIBSODIUM="%WITH_LIBSODIUM%" -D ENABLE_DRAFTS="%ENABLE_DRAFTS%" -D ENABLE_ANALYSIS="%ENABLE_ANALYSIS%" -D ENABLE_CURVE="%ENABLE_CURVE%" -D API_POLLER="%API_POLLER%" -D POLLER="%POLLER%" %EXTRA_FLAGS% -D WITH_LIBSODIUM="%WITH_LIBSODIUM%" -D LIBZMQ_WERROR="%LIBZMQ_WERROR%" -G "%CMAKE_GENERATOR%" "%APPVEYOR_BUILD_FOLDER%"
- cmd: cd "%LIBZMQ_SRCDIR%"
- ps: $env:ZMQ_VERSION_MAJOR = (Select-String -Path .\include\zmq.h -Pattern ".*#define ZMQ_VERSION_MAJOR ([0-9]+).*").Matches.Groups[1].Value
- ps: $env:ZMQ_VERSION_MINOR = (Select-String -Path .\include\zmq.h -Pattern ".*#define ZMQ_VERSION_MINOR ([0-9]+).*").Matches.Groups[1].Value
- ps: $env:ZMQ_VERSION_PATCH = (Select-String -Path .\include\zmq.h -Pattern ".*#define ZMQ_VERSION_PATCH ([0-9]+).*").Matches.Groups[1].Value
- ps: $env:ZMQ_VERSION = "${env:ZMQ_VERSION_MAJOR}.${env:ZMQ_VERSION_MINOR}.${env:ZMQ_VERSION_PATCH}"
- cmd: echo "ZMQ_VERSION is %ZMQ_VERSION%"
build_script:
- cmd: set verbosity=Minimal
- cmd: if "%MSVCYEAR%"=="vs2008" set verbosity=Normal
- cmd: if "%MSVCYEAR%"=="vs2008" set path=C:\Windows\Microsoft.NET\Framework\v3.5;%path%
- cmd: cd "%LIBZMQ_BUILDDIR%"
- cmd: if "%PLATFORM:~0,5%" == "Win32" (
if "%MSVCYEAR%"=="vs2008" (
cmake --build %LIBZMQ_BUILDDIR% --config %configuration% --target install
) else (
cmake --build %LIBZMQ_BUILDDIR% --config %configuration% --target install -- -verbosity:Minimal -maxcpucount -logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
)
)
- cmd: if "%PLATFORM%" == "x64" (
cmake --build %LIBZMQ_BUILDDIR% --config %configuration% --target install -- -verbosity:Minimal -maxcpucount -logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
)
- cmd: if "%PLATFORM%" == "cygwin64" (
cmake --build . -- -j5
)
- cmd: if "%PLATFORM%" == "mingw64" (
cmake --build . -- -j5
)
# TODO this does not work with sonarcloud.io, as it misses the sonar-cxx plugin
# build_script:
# - cmd: msbuild %LIBZMQ_BUILDDIR%\ZeroMQ.sln /verbosity:detailed >%BUILDLOG%
after_build:
# TODO this does not work with sonarcloud.io, as it misses the sonar-cxx plugin
# - cmd: cd "%LIBZMQ_SRCDIR%"
# - cmd: dir
# - cmd: sonar-scanner-3.1.0.1141-windows\bin\sonar-scanner
# -Dsonar.scm.provider=git
# -Dsonar.projectKey=libzmq-msvc
# -Dsonar.organization=sigiesec-github
# -Dsonar.sources=include,src,tests,unittests
# -Dsonar.host.url=https://sonarcloud.io
# -Dsonar.login=%SONARQUBE_TOKEN%
# -Dsonar.cxx.compiler.parser="Visual C++"
# -Dsonar.cxx.compiler.reportPath=build.log
# -Dsonar.cxx.compiler.charset=UTF-8
# -Dsonar.cxx.compiler.regex=^(?<filename>.*)\\((?<line>[0-9]+)\\):\\x20warning\\x20(?<id>C\\d\\d\\d\\d):(?<message>.*)$
# TODO this should be done differently, using the INSTALL cmake target, the current handling depends on the details of the CMakeLists.txt
- cmd: cd %LIBZMQ_BUILDDIR%\bin\%Configuration%"
- cmd: if "%WITH_LIBSODIUM%"=="ON" copy "%SODIUM_LIBRARY_DIR%\libsodium.dll" .
- cmd: copy "%LIBZMQ_SRCDIR%\include\zmq.h" .
- cmd: copy ..\..\lib\%Configuration%\libzmq*.lib . & exit 0
- cmd: 7z a -y -bd -mx=9 libzmq.zip *.exe *.dll *.pdb *.h *.lib
- ps: Push-AppveyorArtifact "libzmq.zip" -Filename "libzmq-${env:ARTIFACT_NAME}-${env:ZMQ_VERSION_MAJOR}_${env:ZMQ_VERSION_MINOR}_${env:ZMQ_VERSION_PATCH}.zip"
test_script:
- cmd: cd "%LIBZMQ_BUILDDIR%"
# TODO run tests in parallel only on selected platforms, since they fail on others, see https://github.com/zeromq/libzmq/issues/3123
- cmd: if "%CMAKE_GENERATOR%"=="Visual Studio 12 2013" set PARALLELIZE=ON
- cmd: if "%CMAKE_GENERATOR%"=="Visual Studio 14 2015" set PARALLELIZE=ON
- cmd: if "%CMAKE_GENERATOR%"=="Visual Studio 12 2013 Win64" set PARALLELIZE=ON
- cmd: if "%CMAKE_GENERATOR%"=="Visual Studio 14 2015 Win64" set PARALLELIZE=ON
- cmd: if not defined TEST_OPTIONS set "TEST_OPTIONS= "
- cmd: if "%PARALLELIZE%"=="ON" (
echo "Running tests in parallel" &&
set TEST_OPTIONS=%TEST_OPTIONS% -j5
)
- cmd: if "%APPVEYOR_REPO_TAG%"=="false" (ctest -C "%Configuration%" -V %TEST_OPTIONS%)
# the analysis build is repeated; apparently appveyor only uses the first section that matches some branch
for:
-
branches:
only:
- master
environment:
matrix:
- platform: Win32
configuration: Release
API_POLLER: poll
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
NO_PR: TRUE
- platform: x64
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
NO_PR: TRUE
- platform: Win32
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
NO_PR: TRUE
- platform: Win32
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
ENABLE_ANALYSIS: ON
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMAKE_GENERATOR: "Visual Studio 15 2017"
MSVCVERSION: "v141"
MSVCYEAR: "vs2017"
NO_PR: TRUE
-
branches:
only:
- /.*analyze$/
environment:
matrix:
- platform: Win32
configuration: Release
WITH_LIBSODIUM: ON
ENABLE_CURVE: ON
ENABLE_ANALYSIS: ON
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
CMAKE_GENERATOR: "Visual Studio 15 2017"
MSVCVERSION: "v141"
MSVCYEAR: "vs2017"
NO_PR: TRUE

View File

@ -1,16 +1,29 @@
#!/bin/sh
# SPDX-License-Identifier: MPL-2.0
# Copyright (c) 2007-2009 iMatix Corporation
# Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
#
# This file is part of 0MQ.
#
# 0MQ is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# 0MQ is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Script to generate all required files from fresh git checkout.
# Debian and Ubuntu do not ship libtool anymore, but OSX does not ship libtoolize.
command -v libtoolize >/dev/null 2>&1
command -v libtool >/dev/null 2>&1
if [ $? -ne 0 ]; then
command -v libtool >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "autogen.sh: error: could not find libtool. libtool is required to run autogen.sh." 1>&2
exit 1
fi
echo "autogen.sh: error: could not find libtool. libtool is required to run autogen.sh." 1>&2
exit 1
fi
command -v autoreconf >/dev/null 2>&1
@ -26,8 +39,7 @@ if [ $? -ne 0 ]; then
fi
autoreconf --install --force --verbose -I config
res=$?
if [ "$res" -ne 0 ]; then
echo "autogen.sh: error: autoreconf exited with status $res" 1>&2
if [ $? -ne 0 ]; then
echo "autogen.sh: error: autoreconf exited with status $?" 1>&2
exit 1
fi

View File

@ -1,8 +0,0 @@
LIST=OS
ifndef QRECURSE
QRECURSE=recurse.mk
ifdef QCONFIG
QRDIR=$(dir $(QCONFIG))
endif
endif
include $(QRDIR)$(QRECURSE)

View File

@ -1,57 +0,0 @@
ifndef QCONFIG
QCONFIG=qconfig.mk
endif
include $(QCONFIG)
NAME=libzmq
#$(INSTALL_ROOT_$(OS)) is pointing to $QNX_TARGET
#by default, unless it was manually re-routed to
#a staging area by setting both INSTALL_ROOT_nto
#and USE_INSTALL_ROOT
LIBZMQ_INSTALL_ROOT ?= $(INSTALL_ROOT_$(OS))
LIBZMQ_VERSION = .4.3.4
#choose Release or Debug
CMAKE_BUILD_TYPE ?= Release
#override 'all' target to bypass the default QNX build system
ALL_DEPENDENCIES = libzmq_all
.PHONY: libzmq_all install check clean
CFLAGS += $(FLAGS)
LDFLAGS += -Wl,--build-id=md5
include $(MKFILES_ROOT)/qtargets.mk
LIBZMQ_DIR = $(PROJECT_ROOT)/../
CMAKE_ARGS = -DCMAKE_TOOLCHAIN_FILE=$(PROJECT_ROOT)/qnx.nto.toolchain.cmake \
-DCMAKE_INSTALL_PREFIX=$(LIBZMQ_INSTALL_ROOT)/${CPUVARDIR}/usr \
-DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) \
-DEXTRA_CMAKE_C_FLAGS="$(CFLAGS)" \
-DEXTRA_CMAKE_CXX_FLAGS="$(CFLAGS)" \
-DEXTRA_CMAKE_ASM_FLAGS="$(FLAGS)" \
-DEXTRA_CMAKE_LINKER_FLAGS="$(LDFLAGS)" \
-DCMAKE_INSTALL_INCLUDEDIR=$(LIBZMQ_INSTALL_ROOT)/usr/include \
-DCMAKE_INSTALL_LIBDIR=$(LIBZMQ_INSTALL_ROOT)/$(CPUVARDIR)/usr/lib \
-DCMAKE_INSTALL_BINDIR=$(LIBZMQ_INSTALL_ROOT)/$(CPUVARDIR)/usr/bin \
-DCPUVARDIR=$(CPUVARDIR)
MAKE_ARGS ?= -j $(firstword $(JLEVEL) 1)
ifndef NO_TARGET_OVERRIDE
libzmq_all:
@mkdir -p build
@cd build && cmake $(CMAKE_ARGS) $(LIBZMQ_DIR)
@cd build && make VERBOSE=1 all $(MAKE_ARGS)
install check: libzmq_all
@cd build && make VERBOSE=1 install
clean iclean spotless:
rm -rf build
uninstall:
endif

View File

@ -1,8 +0,0 @@
LIST=CPU
ifndef QRECURSE
QRECURSE=recurse.mk
ifdef QCONFIG
QRDIR=$(dir $(QCONFIG))
endif
endif
include $(QRDIR)$(QRECURSE)

View File

@ -1,8 +0,0 @@
LIST=VARIANT
ifndef QRECURSE
QRECURSE=recurse.mk
ifdef QCONFIG
QRDIR=$(dir $(QCONFIG))
endif
endif
include $(QRDIR)$(QRECURSE)

View File

@ -1,5 +0,0 @@
include ../../../common.mk
CMAKE_ARGS += -DCMAKE_SYSTEM_PROCESSOR=aarch64
FLAGS += $(VFLAG_le) $(CCVFLAG_le)
LDFLAGS += $(VFLAG_le) $(LDVFLAG_le)

View File

@ -1,8 +0,0 @@
LIST=VARIANT
ifndef QRECURSE
QRECURSE=recurse.mk
ifdef QCONFIG
QRDIR=$(dir $(QCONFIG))
endif
endif
include $(QRDIR)$(QRECURSE)

View File

@ -1,5 +0,0 @@
include ../../../common.mk
CMAKE_ARGS += -DCMAKE_SYSTEM_PROCESSOR=x86_64
FLAGS += $(VFLAG_o) $(CCVFLAG_o)
LDFLAGS += $(VFLAG_o) $(LDVFLAG_o)

View File

@ -1,34 +0,0 @@
if("$ENV{QNX_HOST}" STREQUAL "")
message(FATAL_ERROR "QNX_HOST environment variable not found. Please set the variable to your host's build tools")
endif()
if("$ENV{QNX_TARGET}" STREQUAL "")
message(FATAL_ERROR "QNX_TARGET environment variable not found. Please set the variable to the qnx target location")
endif()
if(CMAKE_HOST_WIN32)
set(HOST_EXECUTABLE_SUFFIX ".exe")
#convert windows paths to cmake paths
file(TO_CMAKE_PATH "$ENV{QNX_HOST}" QNX_HOST)
file(TO_CMAKE_PATH "$ENV{QNX_TARGET}" QNX_TARGET)
else()
set(QNX_HOST "$ENV{QNX_HOST}")
set(QNX_TARGET "$ENV{QNX_TARGET}")
endif()
message(STATUS "using QNX_HOST ${QNX_HOST}")
message(STATUS "using QNX_TARGET ${QNX_TARGET}")
set(QNX TRUE)
set(CMAKE_SYSTEM_NAME QNX)
set(CMAKE_C_COMPILER ${QNX_HOST}/usr/bin/qcc)
set(CMAKE_CXX_COMPILER ${QNX_HOST}/usr/bin/qcc)
set(CMAKE_ASM_COMPILER ${QNX_HOST}/usr/bin/qcc)
set(CMAKE_AR "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ar${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "archiver")
set(CMAKE_RANLIB "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ranlib${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "ranlib")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Vgcc_nto${CMAKE_SYSTEM_PROCESSOR} ${EXTRA_CMAKE_C_FLAGS}" CACHE STRING "c_flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Vgcc_nto${CMAKE_SYSTEM_PROCESSOR} -std=gnu++11 ${EXTRA_CMAKE_CXX_FLAGS}" CACHE STRING "cxx_flags")
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Vgcc_nto${CMAKE_SYSTEM_PROCESSOR} ${EXTRA_CMAKE_ASM_FLAGS}" CACHE STRING "asm_flags")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EXTRA_CMAKE_LINKER_FLAGS}" CACHE STRING "exe_linker_flags")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${EXTRA_CMAKE_LINKER_FLAGS}" CACHE STRING "so_linker_flags")

View File

@ -1,34 +0,0 @@
# Specify all build files that have to go into source packages.
# msvc directory does its own stuff.
EXTRA_DIST = \
cygwin/Makefile.cygwin \
zos/makelibzmq \
zos/cxxall \
zos/README.md \
zos/makeclean \
zos/platform.hpp \
zos/zc++ \
zos/test_fork.cpp \
zos/maketests \
zos/runtests \
cygwin/Makefile.cygwin \
mingw32/Makefile.mingw32 \
mingw32/platform.hpp \
cmake/ci_build.sh \
cmake/Modules \
cmake/NSIS.template32.in \
cmake/NSIS.template64.in \
cmake/ZeroMQConfig.cmake.in \
cmake/clang-format-check.sh.in \
cmake/platform.hpp.in \
valgrind/ci_build.sh \
valgrind/valgrind.supp \
valgrind/vg \
nuget/readme.nuget \
nuget/libzmq.autopkg \
android/Dockerfile \
android/README.md \
android/android_build_helper.sh \
android/ci_build.sh \
android/build.sh

View File

@ -1,14 +0,0 @@
This directory holds build tools, i.e. tools we use to build the current
code tree. Packaging tools (which take released tarballs or github code
repos) should go into /packaging.
Note: 'deprecated-msvc' contains deprecated prepared Visual Studio Solution
files for various Visual Studio versions. These are no longer maintained,
and may or may not work. Please use cmake instead to build with Visual
Studio. Rationale: The solution and project files are hard to maintain,
since there are different variants for each Visual Studio version.
The tests have never been included there for this reason, so they were
never usable for actual development of libzmq. If you encounter that
something that worked before does not work with CMake, please open as
issue at https://github.com/zeromq/libzmq/issues.

View File

@ -1,44 +0,0 @@
#!/usr/bin/env bash
set -x
set -e
cd ../../
mkdir tmp
BUILD_PREFIX=$PWD/tmp
CONFIG_OPTS=()
CONFIG_OPTS+=("CFLAGS=-I${BUILD_PREFIX}/include -g -Og")
CONFIG_OPTS+=("CPPFLAGS=-I${BUILD_PREFIX}/include")
CONFIG_OPTS+=("CXXFLAGS=-I${BUILD_PREFIX}/include -g -Og")
CONFIG_OPTS+=("LDFLAGS=-L${BUILD_PREFIX}/lib")
CONFIG_OPTS+=("PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig")
CONFIG_OPTS+=("--prefix=${BUILD_PREFIX}")
CONFIG_OPTS+=("--enable-drafts=no")
function print_abi_api_breakages() {
echo "ABI breakages detected:"
cat compat_reports/libzmq/${LATEST_VERSION}_to_HEAD/abi_affected.txt | c++filt
echo "API breakages detected:"
cat compat_reports/libzmq/${LATEST_VERSION}_to_HEAD/src_affected.txt | c++filt
exit 1
}
git fetch --unshallow
git fetch --all --tags
LATEST_VERSION=$(git describe --abbrev=0 --tags)
./autogen.sh
./configure "${CONFIG_OPTS[@]}"
make VERBOSE=1 -j5
abi-dumper src/.libs/libzmq.so -o ${BUILD_PREFIX}/libzmq.head.dump -lver HEAD
git clone --depth 1 -b ${LATEST_VERSION} https://github.com/zeromq/libzmq.git latest_release
cd latest_release
./autogen.sh
./configure "${CONFIG_OPTS[@]}"
make VERBOSe=1 -j5
abi-dumper src/.libs/libzmq.so -o ${BUILD_PREFIX}/libzmq.latest.dump -lver ${LATEST_VERSION}
abi-compliance-checker -l libzmq -d1 ${BUILD_PREFIX}/libzmq.latest.dump -d2 ${BUILD_PREFIX}/libzmq.head.dump -list-affected || print_abi_api_breakages

View File

@ -1,63 +0,0 @@
# FROM debian:7 # APT repo no more available.
# FROM debian:8
# FROM debian:9
# FROM debian:10
# FROM debian:11
# FROM ubuntu:12.04 # APT repo no more available.
# FROM ubuntu:14.04
# FROM ubuntu:16.04
# FROM ubuntu:18.04
# FROM ubuntu:20.04
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y -q
RUN apt-get install -y -q \
apt-utils
RUN apt-get install -y -q \
autoconf \
automake \
cmake \
file \
git \
libtool \
pkg-config \
unzip \
wget
# Create user ZMQ, and run Android build with it.
# This ensures that nothing weird is performed with
# ROOT privileges.
RUN useradd -d /home/zmq -m -s /bin/bash zmq
USER zmq
WORKDIR /home/zmq
# Install android NDK (up to NDK 22):
# ENV NDK_VERSION=android-ndk-r18 # Build failed to detect NDK tools (bug).
# ENV NDK_VERSION=android-ndk-r19 # Build passed
# ENV NDK_VERSION=android-ndk-r20 # Build passed
# ENV NDK_VERSION=android-ndk-r21 # Build passed
# ENV NDK_VERSION=android-ndk-r22 # Build passed
# RUN wget -q -O ndk_archive.zip http://dl.google.com/android/repository/${NDK_VERSION}-linux-x86_64.zip
# Install android NDK (from NDK 23):
# ENV NDK_VERSION=android-ndk-r23 # Build passed
# ENV NDK_VERSION=android-ndk-r24 # Build passed
ENV NDK_VERSION=android-ndk-r25
RUN wget -q -O ndk_archive.zip http://dl.google.com/android/repository/${NDK_VERSION}-linux.zip
RUN unzip -q ndk_archive.zip
# Clone and build LIBZMQ
ENV ANDROID_NDK_ROOT=/home/zmq/${NDK_VERSION}
RUN git clone --quiet --depth 1 https://github.com/zeromq/libzmq.git
RUN libzmq/builds/android/ci_build.sh

View File

@ -1,160 +0,0 @@
# Android Build
## Preamble
The last known NDK is automatically downloaded, if not specified otherwise.
As indicated in the main [README](../../README.md#supported-platforms-with-primary-CI), Android support is still DRAFT.
## Configuration
### Basics
Basically, LIBZMQ build for Android, relies on exported variables.
Provided build scripts can mainly be used like
export XXX=xxx
export YYY=yyy
...
cd <libzmq>/builds/android
./<build_script>
### Android NDK
LIBZMQ is tested against Android NDK versions r19 to r25.
By default, LIBZMQ uses NDK `android-ndk-r25`, but you can specify
a different one:
export NDK_VERSION=android-ndk-r23c
If you already have installed your favorite NDK somewhere, all you have to
do is to export and set NDK_VERSION and ANDROID_NDK_ROOT environment
variables, e.g:
export NDK_VERSION="android-ndk-r23b"
export ANDROID_NDK_ROOT=$HOME/${NDK_VERSION}
**Important:** ANDROID_NDK_ROOT must be an absolute path !
If you specify only NDK_VERSION, ANDROID_NDK_ROOT will be automatically set
to its default:
export ANDROID_NDK_ROOT=/tmp/${NDK_VERSION}
To specify the minimum SDK version set the environment variable below:
export MIN_SDK_VERSION=21 # Default value if unset
To specify the build directory set the environment variable below:
export ANDROID_BUILD_DIR=${HOME}/android_build
**Important:** ANDROID_BUILD_ROOT must be an absolute path !
### Android build folder
All Android libraries will be generated under:
${ANDROID_BUILD_DIR}/prefix/<arch>/lib
where <arch> is one of `arm`, `arm64`, `x86` or `x86_64`.
### Android build cleanup
Build and Dependency storage folders are automatically cleaned,
by ci_build.sh. This can be avoided with the help of
ANDROID_BUILD_DIR="no"
If you turn this to "no", make sure to clean what has to be, before
calling `build.sh` or `ci_build.sh`.
### Prebuilt Android libraries
Android prebuilt libraries have to be stored under
ANDROID_BUILD_DIR/prefix/<arch>/lib
Do not forget to disable [Android cleanup](#android-build-cleanup).
### Dependencies
By default, `build.sh` download dependencies under `/tmp/tmp-deps`.
You can specify another folder with the help of ANDROID_DEPENDENCIES_DIR:
ANDROID_DEPENDENCIES_DIR=${HOME}/my_dependencies
If you place your own dependency source trees there,
do not forget to disable [Android cleanup](#android-build-cleanup).
### Cryptographic configuration
The variable CURVE accepts 2 different values:
"" : LIBZMQ is built without any encryption support.
"libsodium" : LIBZMQ is built with LIBSODIUM encryption support (see below).
### Other configuration variables
You can also check configuration variables in `build.sh` itself, in its
"Configuration & tuning options" comment block.
## LIBSODIUM
LIBSODIUM is built along with LIBZMQ, when CURVE="libsodium".
- If you have your own clone of LIBSODIUM, set LIBSODIUM_ROOT to point to
its folder.
- If the variable LIBSODIUM_ROOT is not set, LIBZMQ will look for a folder
'libsodium' close to his own one.
- If no folder 'libsodium' exists, then LIBZMQ will clone LIBSODIUM from its
official STABLE branch.
## Build
See chapter [Configuration](#configuration) for configuration options and
other details.
Select your preferred parameters:
export XXX=xxx
export YYY=yyy
...
and run:
cd <libzmq>/builds/android
./build.sh [ arm | arm64 | x86 | x86_64 ]
Parameter selection and the calls to build.sh can be located in a
SHELL script, like in ci_build.sh.
## CI build
Basically, it will call `build.sh` once, for each Android target.
This script accepts the same configuration variables, but some are set
with different default values. For instance, the dependencies are not
downloaded or cloned in `/tmp/tmp-deps, but inside LIBZMQ clone.
It can be used in the same way as build.sh
export XXX=xxx
export YYY=yyy
cd <libzmq>/builds/android
./ci_build.sh
## Dockerfile
An example of Docker file is provided, for Ubuntu 22.04
Minimal changes are required to support Debian 9 to 11.
Minimal changes are required to support CentOS (7 only), Rocky Linux (8 & 9),
and many Fedora (22 to 37).

View File

@ -1,636 +0,0 @@
#!/usr/bin/env bash
#
# Copyright (c) 2014, Joe Eli McIlvain
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
# THE POSSIBILITY OF SUCH DAMAGE.
#
###
#
# Courtesy of Joe Eli McIlvain; original code at:
# https://github.com/jemc/android_build_helper
# android_build_helper.sh
#
# The following is a helper script for setting up android builds for
# "native" libraries maintained with an autotools build system.
# It merely helps to create the proper cross-compile environment.
# It makes no attempt to wrap the library or make it accessible to Java code;
# the intention is to make the bare library available to other "native" code.
#
# To get the latest version of this script, please download from:
# https://github.com/jemc/android_build_helper
#
# You are free to modify and redistribute this script, but if you add
# improvements, please consider submitting a pull request or patch to the
# aforementioned upstream repository for the benefit of other users.
#
# This script is provided with no express or implied warranties.
#
########################################################################
# Utilities & helper functions
########################################################################
function android_build_trace {
if [ -n "${BUILD_ARCH}" ] ; then
echo "LIBZMQ (${BUILD_ARCH}) - $*"
else
echo "LIBZMQ - $*"
fi
}
function android_build_check_fail {
if [ ! ${#ANDROID_BUILD_FAIL[@]} -eq 0 ]; then
android_build_trace "Android build failed for the following reasons:"
for reason in "${ANDROID_BUILD_FAIL[@]}"; do
local formatted_reason=" ${reason}"
echo "${formatted_reason}"
done
exit 1
fi
}
function android_download_ndk {
if [ -d "${ANDROID_NDK_ROOT}" ] ; then
# NDK folder detected, let's assume it's valid ...
android_build_trace "Using existing NDK folder '${ANDROID_NDK_ROOT}'."
return
fi
if [ ! -d "$(dirname "${ANDROID_NDK_ROOT}")" ] ; then
ANDROID_BUILD_FAIL+=("Cannot download NDK in a non existing folder")
ANDROID_BUILD_FAIL+=(" $(dirname "${ANDROID_NDK_ROOT}/")")
fi
android_build_check_fail
local filename
local platform="$(uname | tr '[:upper:]' '[:lower:]')"
case "${platform}" in
linux*)
if [ "${NDK_NUMBER}" -ge 2300 ] ; then
# Since NDK 23, NDK archives are renamed.
filename=${NDK_VERSION}-linux.zip
else
filename=${NDK_VERSION}-linux-x86_64.zip
fi
;;
darwin*)
if [ "${NDK_NUMBER}" -ge 2300 ] ; then
# Since NDK 23, NDK archives are renamed.
filename=${NDK_VERSION}-darwin.zip
else
filename=${NDK_VERSION}-darwin-x86_64.zip
fi
;;
*) android_build_trace "Unsupported platform ('${platform}')" ; exit 1 ;;
esac
if [ -z "${filename}" ] ; then
ANDROID_BUILD_FAIL+=("Unable to detect NDK filename.")
fi
android_build_check_fail
android_build_trace "Downloading NDK '${NDK_VERSION}'..."
(
cd "$(dirname "${ANDROID_NDK_ROOT}")" \
&& rm -f "${filename}" \
&& wget -q "http://dl.google.com/android/repository/${filename}" -O "${filename}" \
&& android_build_trace "Extracting NDK '${filename}'..." \
&& unzip -q "${filename}" \
&& android_build_trace "NDK extracted under '${ANDROID_NDK_ROOT}'."
) || {
ANDROID_BUILD_FAIL+=("Failed to install NDK ('${NDK_VERSION}')")
ANDROID_BUILD_FAIL+=(" ${filename}")
}
android_build_check_fail
}
function android_build_set_env {
BUILD_ARCH=$1
local platform="$(uname | tr '[:upper:]' '[:lower:]')"
case "${platform}" in
linux*)
export ANDROID_BUILD_PLATFORM=linux-x86_64
;;
darwin*)
export ANDROID_BUILD_PLATFORM=darwin-x86_64
;;
*) android_build_trace "Unsupported platform ('${platform}')" ; exit 1 ;;
esac
export ANDROID_BUILD_TOOLCHAIN="${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/${ANDROID_BUILD_PLATFORM}"
export TOOLCHAIN_PATH="${ANDROID_BUILD_TOOLCHAIN}/bin"
# Set variables for each architecture
if [ "${BUILD_ARCH}" == "arm" ]; then
export TOOLCHAIN_HOST="arm-linux-androideabi"
export TOOLCHAIN_COMP="armv7a-linux-androideabi${MIN_SDK_VERSION}"
export TOOLCHAIN_ABI="armeabi-v7a"
export TOOLCHAIN_ARCH="arm"
elif [ "${BUILD_ARCH}" == "x86" ]; then
export TOOLCHAIN_HOST="i686-linux-android"
export TOOLCHAIN_COMP="i686-linux-android${MIN_SDK_VERSION}"
export TOOLCHAIN_ABI="x86"
export TOOLCHAIN_ARCH="x86"
elif [ "${BUILD_ARCH}" == "arm64" ]; then
export TOOLCHAIN_HOST="aarch64-linux-android"
export TOOLCHAIN_COMP="aarch64-linux-android${MIN_SDK_VERSION}"
export TOOLCHAIN_ABI="arm64-v8a"
export TOOLCHAIN_ARCH="arm64"
elif [ "${BUILD_ARCH}" == "x86_64" ]; then
export TOOLCHAIN_HOST="x86_64-linux-android"
export TOOLCHAIN_COMP="x86_64-linux-android${MIN_SDK_VERSION}"
export TOOLCHAIN_ABI="x86_64"
export TOOLCHAIN_ARCH="x86_64"
fi
# Since NDK r22 the "platforms" dir got removed
if [ -d "${ANDROID_NDK_ROOT}/platforms" ]; then
export ANDROID_BUILD_SYSROOT="${ANDROID_NDK_ROOT}/platforms/android-${MIN_SDK_VERSION}/arch-${TOOLCHAIN_ARCH}"
else
export ANDROID_BUILD_SYSROOT="${ANDROID_BUILD_TOOLCHAIN}/sysroot"
fi
export ANDROID_BUILD_PREFIX="${ANDROID_BUILD_DIR}/prefix/${TOOLCHAIN_ARCH}"
# Since NDK r25, libc++_shared.so is no more in 'sources/cxx-stl/...'
export ANDROID_STL="libc++_shared.so"
if [ -x "${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/${TOOLCHAIN_ABI}/${ANDROID_STL}" ] ; then
export ANDROID_STL_ROOT="${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/${TOOLCHAIN_ABI}"
else
export ANDROID_STL_ROOT="${ANDROID_BUILD_SYSROOT}/usr/lib/${TOOLCHAIN_HOST}"
# NDK 25 requires -L<path-to-libc.so> ...
# I don't understand why, but without it, ./configure fails to build a valid 'conftest'.
export ANDROID_LIBC_ROOT="${ANDROID_BUILD_SYSROOT}/usr/lib/${TOOLCHAIN_HOST}/${MIN_SDK_VERSION}"
fi
}
function android_build_env {
##
# Check that necessary environment variables are set
if [ -z "$ANDROID_NDK_ROOT" ]; then
ANDROID_BUILD_FAIL+=("Please set the ANDROID_NDK_ROOT environment variable")
ANDROID_BUILD_FAIL+=(" (eg. \"/home/user/android/android-ndk-r25\")")
fi
if [ -z "$ANDROID_BUILD_TOOLCHAIN" ]; then
ANDROID_BUILD_FAIL+=("Please set the ANDROID_BUILD_TOOLCHAIN environment variable")
ANDROID_BUILD_FAIL+=(" (eg. \"/home/user/android/android-ndk-r25/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64\")")
fi
if [ -z "$TOOLCHAIN_PATH" ]; then
ANDROID_BUILD_FAIL+=("Please set the TOOLCHAIN_PATH environment variable")
ANDROID_BUILD_FAIL+=(" (eg. \"/home/user/android/android-ndk-r25/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin\")")
fi
if [ -z "$TOOLCHAIN_HOST" ]; then
ANDROID_BUILD_FAIL+=("Please set the TOOLCHAIN_HOST environment variable")
ANDROID_BUILD_FAIL+=(" (eg. \"arm-linux-androideabi\")")
fi
if [ -z "$TOOLCHAIN_COMP" ]; then
ANDROID_BUILD_FAIL+=("Please set the TOOLCHAIN_COMP environment variable")
ANDROID_BUILD_FAIL+=(" (eg. \"armv7a-linux-androideabi\")")
fi
if [ -z "$TOOLCHAIN_ABI" ]; then
ANDROID_BUILD_FAIL+=("Please set the TOOLCHAIN_ABI environment variable")
ANDROID_BUILD_FAIL+=(" (eg. \"armeabi-v7a\")")
fi
if [ -z "$TOOLCHAIN_ARCH" ]; then
ANDROID_BUILD_FAIL+=("Please set the TOOLCHAIN_ARCH environment variable")
ANDROID_BUILD_FAIL+=(" (eg. \"arm\")")
fi
android_build_check_fail
##
# Check that directories given by environment variables exist
if [ ! -d "$ANDROID_NDK_ROOT" ]; then
ANDROID_BUILD_FAIL+=("The ANDROID_NDK_ROOT directory does not exist")
ANDROID_BUILD_FAIL+=(" ${ANDROID_NDK_ROOT}")
fi
if [ ! -d "$ANDROID_STL_ROOT" ]; then
ANDROID_BUILD_FAIL+=("The ANDROID_STL_ROOT directory does not exist")
ANDROID_BUILD_FAIL+=(" ${ANDROID_STL_ROOT}")
fi
if [ -n "${ANDROID_LIBC_ROOT}" ] && [ ! -d "${ANDROID_LIBC_ROOT}" ]; then
ANDROID_BUILD_FAIL+=("The ANDROID_LIBC_ROOT directory does not exist")
ANDROID_BUILD_FAIL+=(" ${ANDROID_LIBC_ROOT}")
fi
if [ ! -d "${ANDROID_BUILD_TOOLCHAIN}" ]; then
ANDROID_BUILD_FAIL+=("The ANDROID_BUILD_TOOLCHAIN directory does not exist")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_TOOLCHAIN}")
fi
if [ ! -d "$TOOLCHAIN_PATH" ]; then
ANDROID_BUILD_FAIL+=("The TOOLCHAIN_PATH directory does not exist")
ANDROID_BUILD_FAIL+=(" ${TOOLCHAIN_PATH}")
fi
##
# Set up some local variables and check them
if [ ! -d "$ANDROID_BUILD_SYSROOT" ]; then
ANDROID_BUILD_FAIL+=("The ANDROID_BUILD_SYSROOT directory does not exist")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_SYSROOT}")
fi
mkdir -p "$ANDROID_BUILD_PREFIX" || {
ANDROID_BUILD_FAIL+=("Failed to make ANDROID_BUILD_PREFIX directory")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_PREFIX}")
}
android_build_check_fail
}
function _android_build_opts_process_binaries {
export ANDROID_BUILD_CC="${TOOLCHAIN_PATH}/${TOOLCHAIN_COMP}-clang"
export ANDROID_BUILD_CXX="${TOOLCHAIN_PATH}/${TOOLCHAIN_COMP}-clang++"
# Since NDK r22 the "platforms" dir got removed and the default linker is LLD
if [ -d "${ANDROID_NDK_ROOT}/platforms" ]; then
export ANDROID_BUILD_LD="${TOOLCHAIN_PATH}/${TOOLCHAIN_HOST}-ld"
else
export ANDROID_BUILD_LD="${TOOLCHAIN_PATH}/ld"
fi
# Since NDK r24 this binary was removed due to LLVM being now the default
if [ ! -x "${TOOLCHAIN_PATH}/${TOOLCHAIN_HOST}-as" ]; then
export ANDROID_BUILD_AS="${TOOLCHAIN_PATH}/llvm-as"
else
export ANDROID_BUILD_AS="${TOOLCHAIN_PATH}/${TOOLCHAIN_HOST}-as"
fi
# Since NDK r23 those binaries were removed due to LLVM being now the default
if [ ! -x "${TOOLCHAIN_PATH}/${TOOLCHAIN_HOST}-ar" ]; then
export ANDROID_BUILD_AR="${TOOLCHAIN_PATH}/llvm-ar"
export ANDROID_BUILD_RANLIB="${TOOLCHAIN_PATH}/llvm-ranlib"
export ANDROID_BUILD_STRIP="${TOOLCHAIN_PATH}/llvm-strip"
else
export ANDROID_BUILD_AR="${TOOLCHAIN_PATH}/${TOOLCHAIN_HOST}-ar"
export ANDROID_BUILD_RANLIB="${TOOLCHAIN_PATH}/${TOOLCHAIN_HOST}-ranlib"
export ANDROID_BUILD_STRIP="${TOOLCHAIN_PATH}/${TOOLCHAIN_HOST}-strip"
fi
if [ ! -x "${ANDROID_BUILD_CC}" ]; then
ANDROID_BUILD_FAIL+=("The CC binary does not exist or is not executable")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_CC}")
fi
if [ ! -x "${ANDROID_BUILD_CXX}" ]; then
ANDROID_BUILD_FAIL+=("The CXX binary does not exist or is not executable")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_CXX}")
fi
if [ ! -x "${ANDROID_BUILD_LD}" ]; then
ANDROID_BUILD_FAIL+=("The LD binary does not exist or is not executable")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_LD}")
fi
if [ ! -x "${ANDROID_BUILD_AS}" ]; then
ANDROID_BUILD_FAIL+=("The AS binary does not exist or is not executable")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_AS}")
fi
if [ ! -x "${ANDROID_BUILD_AR}" ]; then
ANDROID_BUILD_FAIL+=("The AR binary does not exist or is not executable")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_AR}")
fi
if [ ! -x "${ANDROID_BUILD_RANLIB}" ]; then
ANDROID_BUILD_FAIL+=("The RANLIB binary does not exist or is not executable")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_RANLIB}")
fi
if [ ! -x "${ANDROID_BUILD_STRIP}" ]; then
ANDROID_BUILD_FAIL+=("The STRIP binary does not exist or is not executable")
ANDROID_BUILD_FAIL+=(" ${ANDROID_BUILD_STRIP}")
fi
ANDROID_BUILD_OPTS+=("TOOLCHAIN=${ANDROID_BUILD_TOOLCHAIN}")
ANDROID_BUILD_OPTS+=("CC=${ANDROID_BUILD_CC}")
ANDROID_BUILD_OPTS+=("CXX=${ANDROID_BUILD_CXX}")
ANDROID_BUILD_OPTS+=("LD=${ANDROID_BUILD_LD}")
ANDROID_BUILD_OPTS+=("AS=${ANDROID_BUILD_AS}")
ANDROID_BUILD_OPTS+=("AR=${ANDROID_BUILD_AR}")
ANDROID_BUILD_OPTS+=("RANLIB=${ANDROID_BUILD_RANLIB}")
ANDROID_BUILD_OPTS+=("STRIP=${ANDROID_BUILD_STRIP}")
android_build_check_fail
}
# Set the ANDROID_BUILD_OPTS variable to a bash array of configure options
function android_build_opts {
ANDROID_BUILD_OPTS=()
_android_build_opts_process_binaries
if [ ${NDK_NUMBER} -ge 2700 ] ; then
# Since NDK r27 symbols like '__aeabi_xxx' are no more exported in the dynamic lib.
export ANDROID_BUILD_LIBS="-lc -ldl -lm -llog -static-libstdc++"
elif [ ${NDK_NUMBER} -ge 2300 ] ; then
# Since NDK r23 we don't need -lgcc due to LLVM being now the default.
export ANDROID_BUILD_LIBS="-lc -ldl -lm -llog -lc++_shared"
else
export ANDROID_BUILD_LIBS="-lc -lgcc -ldl -lm -llog -lc++_shared"
fi
export ANDROID_BUILD_LDFLAGS="-L${ANDROID_BUILD_PREFIX}/lib"
if [ -n "${ANDROID_LIBC_ROOT}" ] ; then
ANDROID_BUILD_LDFLAGS+=" -L${ANDROID_LIBC_ROOT}"
fi
ANDROID_BUILD_LDFLAGS+=" -L${ANDROID_STL_ROOT}"
export ANDROID_BUILD_CFLAGS+=" -D_GNU_SOURCE -D_REENTRANT -D_THREAD_SAFE"
export ANDROID_BUILD_CPPFLAGS+=" -I${ANDROID_BUILD_PREFIX}/include"
if [ "${NDK_NUMBER}" -ge 2400 ] ; then
if [ "${BUILD_ARCH}" = "arm64" ] ; then
export ANDROID_BUILD_CXXFLAGS+=" -mno-outline-atomics"
fi
fi
ANDROID_BUILD_OPTS+=("CFLAGS=${ANDROID_BUILD_CFLAGS} ${ANDROID_BUILD_EXTRA_CFLAGS}")
ANDROID_BUILD_OPTS+=("CPPFLAGS=${ANDROID_BUILD_CPPFLAGS} ${ANDROID_BUILD_EXTRA_CPPFLAGS}")
ANDROID_BUILD_OPTS+=("CXXFLAGS=${ANDROID_BUILD_CXXFLAGS} ${ANDROID_BUILD_EXTRA_CXXFLAGS}")
ANDROID_BUILD_OPTS+=("LDFLAGS=${ANDROID_BUILD_LDFLAGS} ${ANDROID_BUILD_EXTRA_LDFLAGS}")
ANDROID_BUILD_OPTS+=("LIBS=${ANDROID_BUILD_LIBS} ${ANDROID_BUILD_EXTRA_LIBS}")
ANDROID_BUILD_OPTS+=("PKG_CONFIG_LIBDIR=${ANDROID_NDK_ROOT}/prebuilt/${ANDROID_BUILD_PLATFORM}/lib/pkgconfig")
ANDROID_BUILD_OPTS+=("PKG_CONFIG_PATH=${ANDROID_BUILD_PREFIX}/lib/pkgconfig")
ANDROID_BUILD_OPTS+=("PKG_CONFIG_SYSROOT_DIR=${ANDROID_BUILD_SYSROOT}")
ANDROID_BUILD_OPTS+=("PKG_CONFIG_DIR=")
ANDROID_BUILD_OPTS+=("--with-sysroot=${ANDROID_BUILD_SYSROOT}")
ANDROID_BUILD_OPTS+=("--host=${TOOLCHAIN_HOST}")
ANDROID_BUILD_OPTS+=("--prefix=${ANDROID_BUILD_PREFIX}")
android_build_check_fail
}
# Parse readelf output to verify the correct linking of libraries.
# The first argument should be the soname of the newly built library.
# The rest of the arguments should be the sonames of dependencies.
# All sonames should be unversioned for android (no trailing numbers).
function android_build_verify_so {
local soname="$1"
shift # Get rid of first argument - the rest represent dependencies
local sofile="${ANDROID_BUILD_PREFIX}/lib/${soname}"
if [ ! -f "${sofile}" ]; then
ANDROID_BUILD_FAIL+=("Found no library named ${soname}")
ANDROID_BUILD_FAIL+=(" ${sofile}")
fi
android_build_check_fail
local readelf="${TOOLCHAIN_PATH}/${TOOLCHAIN_HOST}-readelf"
if command -v "${readelf}" >/dev/null 2>&1 ; then
export ANDROID_BUILD_READELF="${readelf}"
elif command -v readelf >/dev/null 2>&1 ; then
export ANDROID_BUILD_READELF="readelf"
elif command -v greadelf >/dev/null 2>&1 ; then
export ANDROID_BUILD_READELF="greadelf"
else
ANDROID_BUILD_FAIL+=("Could not find any of readelf, greadelf, or ${readelf}")
fi
android_build_check_fail
local elfoutput
elfoutput=$(LC_ALL=C ${ANDROID_BUILD_READELF} -d "${sofile}")
local soname_regexp='soname: \[([[:alnum:]\.]+)\]'
if [[ $elfoutput =~ $soname_regexp ]]; then
local parsed_soname="${BASH_REMATCH[1]}"
if [ "${parsed_soname}" != "${soname}" ]; then
ANDROID_BUILD_FAIL+=("Actual soname of library ${soname} is incorrect (or versioned):")
ANDROID_BUILD_FAIL+=(" ${parsed_soname}")
fi
else
ANDROID_BUILD_FAIL+=("Failed to meaningfully parse readelf output for library ${soname}:")
ANDROID_BUILD_FAIL+=(" ${elfoutput}")
fi
for dep_soname in "$@" ; do
local dep_sofile="${ANDROID_BUILD_PREFIX}/lib/${dep_soname}"
if [ ! -f "${dep_sofile}" ]; then
ANDROID_BUILD_FAIL+=("Found no library named ${dep_soname}")
ANDROID_BUILD_FAIL+=(" ${dep_sofile}")
elif [[ $elfoutput != *"library: [${dep_soname}]"* ]]; then
ANDROID_BUILD_FAIL+=("Library ${soname} was expected to be linked to library with soname:")
ANDROID_BUILD_FAIL+=(" ${dep_soname}")
fi
done
android_build_check_fail
}
function android_show_configure_opts {
local tag=$1
shift
android_build_trace "./configure options to build '${tag}':"
for opt in "$@"; do
echo " > ${opt}"
done
echo ""
}
# Initialize env variable XXX_ROOT, given dependency name "xxx".
# If XXX_ROOT is not set:
# If ${PROJECT_ROOT}/../xxx exists
# set XXX_ROOT with it.
# Else
# set XXX_ROOT with ${ANDROID_DEPENDENCIES_DIR}/xxx.
# Else
# Verify that folder XXX_ROOT exists.
function android_init_dependency_root {
local lib_name
lib_name="$1"
local variable_name
variable_name="$(echo "${lib_name}" | tr '[:lower:]' '[:upper:]')_ROOT"
local variable_value
variable_value="$(eval echo "\${${variable_name}}")"
if [ -z "${PROJECT_ROOT}" ] ; then
android_build_trace "Error: Variable PROJECT_ROOT is not set."
exit 1
fi
if [ ! -d "${PROJECT_ROOT}" ] ; then
android_build_trace "Error: Cannot find folder '${PROJECT_ROOT}'."
exit 1
fi
if [ -z "${variable_value}" ] ; then
if [ -d "${PROJECT_ROOT}/../${lib_name}" ] ; then
eval "export ${variable_name}=\"$(cd "${PROJECT_ROOT}/../${lib_name}" && pwd)\""
else
eval "export ${variable_name}=\"${ANDROID_DEPENDENCIES_DIR}/${lib_name}\""
fi
variable_value="$(eval echo "\${${variable_name}}")"
elif [ ! -d "${variable_value}" ] ; then
android_build_trace "Error: Folder '${variable_value}' does not exist."
exit 1
fi
android_build_trace "${variable_name}=${variable_value}"
}
function android_download_library {
local tag="$1" ; shift
local root="$1" ; shift
local url="$1" ; shift
local parent="$(dirname "${root}")"
local archive="$(basename "${url}")"
mkdir -p "${parent}"
cd "${parent}"
android_build_trace "Downloading ${tag} from '${url}' ..."
rm -f "${archive}"
wget -q "${url}"
case "${archive}" in
*."tar.gz" ) folder="$(basename "${archive}" ".tar.gz")" ;;
*."tgz" ) folder="$(basename "${archive}" ".tgz")" ;;
* ) android_build_trace "Unsupported extension for '${archive}'." ; exit 1 ;;
esac
android_build_trace "Extracting '${archive}' ..."
tar -xzf "${archive}"
if [ ! -d "${root}" ] ; then
mv "${folder}" "${root}"
fi
android_build_trace "${tag} extracted under under '${root}'."
}
function android_clone_library {
local tag="$1" ; shift
local root="$1" ; shift
local url="$1" ; shift
local branch="$1" ; shift
mkdir -p "$(dirname "${root}")"
if [ -n "${branch}" ] ; then
android_build_trace "Cloning '${url}' (branch '${branch}') under '${root}'."
git clone --quiet --depth 1 -b "${branch}" "${url}" "${root}"
else
android_build_trace "Cloning '${url}' (default branch) under '${root}'."
git clone --quiet --depth 1 "${url}" "${root}"
fi
( cd "${root}" && git log --oneline -n 1) || exit 1
}
# Caller must set CONFIG_OPTS[], before call.
function android_build_library {
local tag=$1 ; shift
local root=$1 ; shift
android_build_trace "Cleaning library '${tag}'."
(
if [ -n "${ANDROID_BUILD_PREFIX}" ] && [ -d "${ANDROID_BUILD_PREFIX}" ] ; then
# Remove *.la files as they might cause errors with cross compiled libraries
find "${ANDROID_BUILD_PREFIX}" -name '*.la' -exec rm {} +
fi
cd "${root}" \
&& ( make clean || : ) \
&& rm -f config.status
) &> /dev/null
android_build_trace "Building library '${tag}'."
(
set -e
android_show_configure_opts "${tag}" "${CONFIG_OPTS[@]}"
cd "${root}"
if [ -e autogen.sh ]; then
./autogen.sh 2> /dev/null
fi
if [ -e buildconf ]; then
./buildconf 2> /dev/null
fi
if [ ! -e autogen.sh ] && [ ! -e buildconf ] && [ ! -e ./configure ] && [ -s ./configure.ac ] ; then
libtoolize --copy --force && \
aclocal -I . && \
autoheader && \
automake --add-missing --copy && \
autoconf || \
autoreconf -fiv
fi
./configure "${CONFIG_OPTS[@]}"
make -j 4
make install
)
}
########################################################################
# Initialization
########################################################################
# Get directory of current script (if not already set)
# This directory is also the basis for the build directories the get created.
if [ -z "$ANDROID_BUILD_DIR" ]; then
export ANDROID_BUILD_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
fi
# Where to download our dependencies
export ANDROID_DEPENDENCIES_DIR="${ANDROID_DEPENDENCIES_DIR:-/tmp/tmp-deps}"
# Set up a variable to hold the global failure reasons, separated by newlines
# (Empty string indicates no failure)
ANDROID_BUILD_FAIL=()
########################################################################
# Sanity checks
########################################################################
case "${NDK_VERSION}" in
"android-ndk-r"[0-9][0-9] ) : ;;
"android-ndk-r"[0-9][0-9][a-z] ) : ;;
"" ) android_build_trace "Variable NDK_VERSION not set." ; exit 1 ;;
* ) android_build_trace "Invalid format for NDK_VERSION ('${NDK_VERSION}')" ; exit 1 ;;
esac
if [ -z "${ANDROID_NDK_ROOT}" ] ; then
android_build_trace "ANDROID_NDK_ROOT not set !"
exit 1
fi
########################################################################
# Compute NDK version into a numeric form:
# android-ndk-r21e -> 2105
# android-ndk-r25 -> 2500
########################################################################
export NDK_NUMBER="$(( $(echo "${NDK_VERSION}"|sed -e 's|android-ndk-r||g' -e 's|[a-z]||g') * 100 ))"
NDK_VERSION_LETTER="$(echo "${NDK_VERSION}"|sed -e 's|android-ndk-r[0-9][0-9]||g'|tr '[:lower:]' '[:upper:]')"
if [ -n "${NDK_VERSION_LETTER}" ] ; then
NDK_NUMBER=$(( $(( NDK_NUMBER + $(printf '%d' \'"${NDK_VERSION_LETTER}") )) - 64 ))
fi
android_build_trace "Configured NDK_VERSION: ${NDK_VERSION} ($NDK_NUMBER)."

View File

@ -1,154 +0,0 @@
#!/usr/bin/env bash
#
# Exit if any step fails
set -e
# Use directory of current script as the working directory
cd "$( dirname "${BASH_SOURCE[0]}" )"
PROJECT_ROOT="$(cd ../.. && pwd)"
########################################################################
# Configuration & tuning options.
########################################################################
# Set default values used in ci builds
export NDK_VERSION="${NDK_VERSION:-android-ndk-r25}"
# Set default path to find Android NDK.
# Must be of the form <path>/${NDK_VERSION} !!
export ANDROID_NDK_ROOT="${ANDROID_NDK_ROOT:-/tmp/${NDK_VERSION}}"
# With NDK r22b, the minimum SDK version range is [16, 31].
# Since NDK r24, the minimum SDK version range is [19, 31].
# SDK version 21 is the minimum version for 64-bit builds.
export MIN_SDK_VERSION=${MIN_SDK_VERSION:-21}
# Use directory of current script as the build directory
# ${ANDROID_BUILD_DIR}/prefix/<build_arch>/lib will contain produced libraries
export ANDROID_BUILD_DIR="${ANDROID_BUILD_DIR:-${PWD}}"
# Where to download our dependencies: default to /tmp/tmp-deps
export ANDROID_DEPENDENCIES_DIR="${ANDROID_DEPENDENCIES_DIR:-/tmp/tmp-deps}"
# Clean before processing
export ANDROID_BUILD_CLEAN="${ANDROID_BUILD_CLEAN:-no}"
# Set this to 'no', to enable verbose ./configure
export CI_CONFIG_QUIET="${CI_CONFIG_QUIET:-no}"
# Select CURVE implementation:
# - "" # Do not use any CURVE implementation.
# - "libsodium" # Use LIBSODIUM implementation.
export CURVE="${CURVE:-}"
# By default, dependencies will be cloned to /tmp/tmp-deps.
# If you have your own source tree for LIBSODIUM, uncomment
# the line below, and provide its absolute path:
# export LIBSODIUM_ROOT="<absolute_path_to_LIBSODIUM_source_tree>"
########################################################################
# Utilities
########################################################################
# Get access to android_build functions and variables
# Perform some sanity checks and calculate some variables.
source "${PROJECT_ROOT}/builds/android/android_build_helper.sh"
function usage {
echo "LIBZMQ - Usage:"
echo " export XXX=xxx"
echo " ./build.sh [ arm | arm64 | x86 | x86_64 ]"
echo ""
echo "See this file (configuration & tuning options) for details"
echo "on variables XXX and their values xxx"
exit 1
}
########################################################################
# Sanity checks
########################################################################
BUILD_ARCH="$1"
[ -z "${BUILD_ARCH}" ] && usage
# Set ROOT path for LIBSODIUM source tree, if CURVE is "libsodium"
if [ "${CURVE}x" = "libsodiumx" ] ; then
# Check or initialize LIBSODIUM_ROOT
android_init_dependency_root "libsodium"
fi
########################################################################
# Compilation
########################################################################
# Choose a C++ standard library implementation from the ndk
export ANDROID_BUILD_CXXSTL="gnustl_shared_49"
# Additional flags for LIBTOOL, for LIBZMQ and other dependencies.
export LIBTOOL_EXTRA_LDFLAGS='-avoid-version'
# Set up android build environment and set ANDROID_BUILD_OPTS array
android_build_set_env "${BUILD_ARCH}"
android_download_ndk
android_build_env
android_build_opts
# Check for environment variable to clear the prefix and do a clean build
if [ "${ANDROID_BUILD_CLEAN}" = "yes" ]; then
android_build_trace "Doing a clean build (removing previous build and dependencies)..."
rm -rf "${ANDROID_BUILD_PREFIX:?}"/*
# Called shells MUST not clean after ourselves !
export ANDROID_BUILD_CLEAN="no"
fi
DEPENDENCIES=()
if [ -z "${CURVE}" ]; then
CURVE="--disable-curve"
elif [ "${CURVE}" == "libsodium" ]; then
CURVE="--with-libsodium=yes"
DEPENDENCIES+=("libsodium.so")
##
# Build LIBSODIUM from latest STABLE branch
(android_build_verify_so "libsodium.so" &> /dev/null) || {
if [ ! -d "${LIBSODIUM_ROOT}" ] ; then
android_clone_library "LIBSODIUM" "${LIBSODIUM_ROOT}" "https://github.com/jedisct1/libsodium.git" "stable"
fi
(
CONFIG_OPTS=()
[ "${CI_CONFIG_QUIET}" = "yes" ] && CONFIG_OPTS+=("--quiet")
CONFIG_OPTS+=("${ANDROID_BUILD_OPTS[@]}")
CONFIG_OPTS+=("--without-docs")
CONFIG_OPTS+=("--disable-soname-versions")
android_build_library "LIBSODIUM" "${LIBSODIUM_ROOT}"
) || exit 1
}
fi
##
# Build libzmq from local source
(android_build_verify_so "libzmq.so" "${DEPENDENCIES[@]}" &> /dev/null) || {
(
CONFIG_OPTS=()
[ "${CI_CONFIG_QUIET}" = "yes" ] && CONFIG_OPTS+=("--quiet")
CONFIG_OPTS+=("${ANDROID_BUILD_OPTS[@]}")
CONFIG_OPTS+=("${CURVE}")
CONFIG_OPTS+=("--without-docs")
android_build_library "LIBZMQ" "${PROJECT_ROOT}"
) || exit 1
}
##
# Fetch the STL as well.
cp "${ANDROID_STL_ROOT}/${ANDROID_STL}" "${ANDROID_BUILD_PREFIX}/lib/."
##
# Verify shared libraries in prefix
for library in "libzmq.so" "${DEPENDENCIES[@]}" ; do
android_build_verify_so "${library}"
done
android_build_verify_so "libzmq.so" "${DEPENDENCIES[@]}" "${ANDROID_STL}"
android_build_trace "Android build successful"

View File

@ -1,31 +0,0 @@
#!/usr/bin/env bash
#
# Exit if any step fails
set -e
# Use directory of current script as the working directory
cd "$( dirname "${BASH_SOURCE[0]}" )"
# Configuration
export NDK_VERSION="${NDK_VERSION:-android-ndk-r25}"
export ANDROID_NDK_ROOT="${ANDROID_NDK_ROOT:-/tmp/${NDK_VERSION}}"
export MIN_SDK_VERSION=${MIN_SDK_VERSION:-21}
export ANDROID_BUILD_DIR="${ANDROID_BUILD_DIR:-${PWD}/.build}"
export ANDROID_BUILD_CLEAN="${ANDROID_BUILD_CLEAN:-yes}"
export ANDROID_DEPENDENCIES_DIR="${ANDROID_DEPENDENCIES_DIR:-${PWD}/.deps}"
# Cleanup.
if [ "${ANDROID_BUILD_CLEAN}" = "yes" ] ; then
rm -rf "${ANDROID_BUILD_DIR}/prefix"
mkdir -p "${ANDROID_BUILD_DIR}/prefix"
rm -rf "${ANDROID_DEPENDENCIES_DIR}"
mkdir -p "${ANDROID_DEPENDENCIES_DIR}"
# Called shells MUST not clean after ourselves !
export ANDROID_BUILD_CLEAN="no"
fi
./build.sh "arm"
./build.sh "arm64"
./build.sh "x86"
./build.sh "x86_64"

View File

@ -1,41 +0,0 @@
# additional target to perform clang-format run, requires clang-format
# get all project files
file(GLOB_RECURSE ALL_SOURCE_FILES
RELATIVE ${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_SOURCE_DIR}/src/*.cpp ${CMAKE_SOURCE_DIR}/src/*.h ${CMAKE_SOURCE_DIR}/src/*.hpp
${CMAKE_SOURCE_DIR}/tests/*.cpp ${CMAKE_SOURCE_DIR}/tests/*.h ${CMAKE_SOURCE_DIR}/tests/*.hpp
${CMAKE_SOURCE_DIR}/perf/*.cpp ${CMAKE_SOURCE_DIR}/perf/*.h ${CMAKE_SOURCE_DIR}/perf/*.hpp
${CMAKE_SOURCE_DIR}/tools/*.cpp ${CMAKE_SOURCE_DIR}/tools/*.h ${CMAKE_SOURCE_DIR}/tools/*.hpp
${CMAKE_SOURCE_DIR}/include/*.h
)
if("${CLANG_FORMAT}" STREQUAL "")
set(CLANG_FORMAT "clang-format")
endif()
add_custom_target(
clang-format
COMMAND ${CLANG_FORMAT} -style=file -i ${ALL_SOURCE_FILES}
)
function(JOIN VALUES GLUE OUTPUT)
string (REPLACE ";" "${GLUE}" _TMP_STR "${VALUES}")
set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
endfunction()
configure_file(builds/cmake/clang-format-check.sh.in clang-format-check.sh @ONLY)
add_custom_target(
clang-format-check
COMMAND chmod +x clang-format-check.sh
COMMAND ./clang-format-check.sh
COMMENT "Checking correct formatting according to .clang-format file using ${CLANG_FORMAT}"
)
add_custom_target(
clang-format-diff
COMMAND ${CLANG_FORMAT} -style=file -i ${ALL_SOURCE_FILES}
COMMAND git diff ${ALL_SOURCE_FILES}
COMMENT "Formatting with clang-format (using ${CLANG_FORMAT}) and showing differences with latest commit"
)

View File

@ -0,0 +1,24 @@
# - Find Asciidoc
# this module looks for asciidoc and a2x
#
# ASCIIDOC_EXECUTABLE - the full path to asciidoc
# ASCIIDOC_FOUND - If false, don't attempt to use asciidoc.
# A2X_EXECUTABLE - the full path to a2x
# A2X_FOUND - If false, don't attempt to use a2x.
find_program(ASCIIDOC_EXECUTABLE asciidoc asciidoc.py
PATHS "$ENV{ASCIIDOC_ROOT}"
"$ENV{PROGRAMW6432}/asciidoc"
"$ENV{PROGRAMFILES}/asciidoc"
"$ENV{PROGRAMFILES(X86)}/asciidoc")
find_program(A2X_EXECUTABLE a2x
PATHS "$ENV{ASCIIDOC_ROOT}"
"$ENV{PROGRAMW6432}/asciidoc"
"$ENV{PROGRAMFILES}/asciidoc"
"$ENV{PROGRAMFILES(X86)}/asciidoc")
include(FindPackageHandleStandardArgs)
find_package_handle_standard_ARGS(AsciiDoc REQUIRED_VARS ASCIIDOC_EXECUTABLE)
mark_as_advanced(ASCIIDOC_EXECUTABLE A2X_EXECUTABLE)

View File

@ -1,23 +0,0 @@
# - Find Asciidoctor
# this module looks for asciidoctor
#
# ASCIIDOCTOR_EXECUTABLE - the full path to asciidoc
# ASCIIDOCTOR_FOUND - If false, don't attempt to use asciidoc.
set (PROGRAMFILESX86 "PROGRAMFILES(X86)")
find_program(ASCIIDOCTOR_EXECUTABLE asciidoctor asciidoctor
PATHS "$ENV{ASCIIDOCTOR_ROOT}"
"$ENV{PROGRAMW6432}/asciidoctor"
"$ENV{PROGRAMFILES}/asciidoctor"
"$ENV{${PROGRAMFILESX86}}/asciidoctor")
find_program(A2X_EXECUTABLE a2x
PATHS "$ENV{ASCIIDOCTOR_ROOT}"
"$ENV{PROGRAMW6432}/asciidoctor"
"$ENV{PROGRAMFILES}/asciidoctor"
"$ENV{${PROGRAMFILESX86}}/asciidoctor")
include(FindPackageHandleStandardArgs)
find_package_handle_standard_ARGS(AsciiDoctor REQUIRED_VARS ASCIIDOCTOR_EXECUTABLE)
mark_as_advanced(ASCIIDOCTOR_EXECUTABLE)

View File

@ -1,8 +0,0 @@
include(FindPackageHandleStandardArgs)
if (NOT MSVC)
find_package(PkgConfig REQUIRED)
pkg_check_modules(NSS3 "nss>=3.19")
find_package_handle_standard_args(NSS3 DEFAULT_MSG NSS3_LIBRARIES NSS3_CFLAGS)
endif()

View File

@ -1,45 +0,0 @@
if (NOT MSVC)
find_package(PkgConfig REQUIRED)
pkg_check_modules(PC_GSSAPI_KRB5 "libgssapi_krb5")
if (PC_GSSAPI_KRB5_FOUND)
set(pkg_config_names_private "${pkg_config_names_private} libgssapi_krb5")
endif()
if (NOT PC_GSSAPI_KRB5_FOUND)
pkg_check_modules(PC_GSSAPI_KRB5 "gssapi_krb5")
if (PC_GSSAPI_KRB5_FOUND)
set(pkg_config_names_private "${pkg_config_names_private} gssapi_krb5")
endif()
endif (NOT PC_GSSAPI_KRB5_FOUND)
if (PC_GSSAPI_KRB5_FOUND)
set(GSSAPI_KRB5_INCLUDE_HINTS ${PC_GSSAPI_KRB5_INCLUDE_DIRS} ${PC_GSSAPI_KRB5_INCLUDE_DIRS}/*)
set(GSSAPI_KRB5_LIBRARY_HINTS ${PC_GSSAPI_KRB5_LIBRARY_DIRS} ${PC_GSSAPI_KRB5_LIBRARY_DIRS}/*)
else()
set(pkg_config_libs_private "${pkg_config_libs_private} -lgssapi_krb5")
endif()
endif (NOT MSVC)
# some libraries install the headers is a subdirectory of the include dir
# returned by pkg-config, so use a wildcard match to improve chances of finding
# headers and libraries.
find_path(
GSSAPI_KRB5_INCLUDE_DIRS
NAMES gssapi/gssapi_krb5.h
HINTS ${GSSAPI_KRB5_INCLUDE_HINTS}
)
set (GSSAPI_NAMES libgssapi_krb5 gssapi_krb5)
if (${CMAKE_SIZEOF_VOID_P} STREQUAL 8)
set (GSSAPI_NAMES ${GSSAPI_NAMES} gssapi64)
elseif (${CMAKE_SIZEOF_VOID_P} STREQUAL 4)
set (GSSAPI_NAMES ${GSSAPI_NAMES} gssapi32)
endif()
find_library(
GSSAPI_KRB5_LIBRARIES
NAMES ${GSSAPI_NAMES}
HINTS ${GSSAPI_KRB5_LIBRARY_HINTS}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(gssapi_krb5 DEFAULT_MSG GSSAPI_KRB5_LIBRARIES GSSAPI_KRB5_INCLUDE_DIRS)
mark_as_advanced(GSSAPI_KRB5_FOUND GSSAPI_KRB5_LIBRARIES GSSAPI_KRB5_INCLUDE_DIRS)

View File

@ -1,48 +0,0 @@
################################################################################
# THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY #
# Please refer to the README for information about making permanent changes. #
################################################################################
if (NOT MSVC)
find_package(PkgConfig REQUIRED)
pkg_check_modules(PC_SODIUM "libsodium")
if (PC_SODIUM_FOUND)
set(pkg_config_names_private "${pkg_config_names_private} libsodium")
endif()
if (NOT PC_SODIUM_FOUND)
pkg_check_modules(PC_SODIUM "sodium")
if (PC_SODIUM_FOUND)
set(pkg_config_names_private "${pkg_config_names_private} sodium")
endif()
endif (NOT PC_SODIUM_FOUND)
if (PC_SODIUM_FOUND)
set(SODIUM_INCLUDE_HINTS ${PC_SODIUM_INCLUDE_DIRS} ${PC_SODIUM_INCLUDE_DIRS}/*)
set(SODIUM_LIBRARY_HINTS ${PC_SODIUM_LIBRARY_DIRS} ${PC_SODIUM_LIBRARY_DIRS}/*)
else()
set(pkg_config_libs_private "${pkg_config_libs_private} -lsodium")
endif()
endif (NOT MSVC)
# some libraries install the headers is a subdirectory of the include dir
# returned by pkg-config, so use a wildcard match to improve chances of finding
# headers and libraries.
find_path(
SODIUM_INCLUDE_DIRS
NAMES sodium.h
HINTS ${SODIUM_INCLUDE_HINTS}
)
find_library(
SODIUM_LIBRARIES
NAMES libsodium sodium
HINTS ${SODIUM_LIBRARY_HINTS}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(sodium DEFAULT_MSG SODIUM_LIBRARIES SODIUM_INCLUDE_DIRS)
mark_as_advanced(SODIUM_FOUND SODIUM_LIBRARIES SODIUM_INCLUDE_DIRS)
################################################################################
# THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY #
# Please refer to the README for information about making permanent changes. #
################################################################################

View File

@ -6,3 +6,13 @@ string(REGEX REPLACE ".*#define ZMQ_VERSION_PATCH ([0-9]+).*" "\\1" ZMQ_VERSION_
set(ZMQ_VERSION "${ZMQ_VERSION_MAJOR}.${ZMQ_VERSION_MINOR}.${ZMQ_VERSION_PATCH}")
message(STATUS "Detected ZMQ Version - ${ZMQ_VERSION}")
if(MSVC_VERSION MATCHES "1700")
set(_zmq_COMPILER "-v110")
elseif(MSVC10)
set(_zmq_COMPILER "-v100")
elseif(MSVC90)
set(_zmq_COMPILER "-v90")
else()
set(_zmq_COMPILER "")
endif()

View File

@ -16,57 +16,6 @@ int main(int argc, char *argv [])
ZMQ_HAVE_SOCK_CLOEXEC)
endmacro()
macro(zmq_check_efd_cloexec)
message(STATUS "Checking whether EFD_CLOEXEC is supported")
check_c_source_runs(
"
#include <sys/eventfd.h>
int main(int argc, char *argv [])
{
int s = eventfd (0, EFD_CLOEXEC);
return(s == -1);
}
"
ZMQ_HAVE_EVENTFD_CLOEXEC)
endmacro()
macro(zmq_check_o_cloexec)
message(STATUS "Checking whether O_CLOEXEC is supported")
check_c_source_runs(
"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char *argv [])
{
int s = open (\"/dev/null\", O_CLOEXEC | O_RDONLY);
return s == -1;
}
"
ZMQ_HAVE_O_CLOEXEC)
endmacro()
macro(zmq_check_so_bindtodevice)
message(STATUS "Checking whether SO_BINDTODEVICE is supported")
check_c_source_runs(
"
#include <sys/socket.h>
int main(int argc, char *argv [])
{
/* Actually making the setsockopt() call requires CAP_NET_RAW */
#ifndef SO_BINDTODEVICE
return 1;
#else
return 0;
#endif
}
"
ZMQ_HAVE_SO_BINDTODEVICE)
endmacro()
# TCP keep-alives Checks.
macro(zmq_check_so_keepalive)
@ -178,156 +127,3 @@ int main(int argc, char *argv [])
"
ZMQ_HAVE_TCP_KEEPALIVE)
endmacro()
macro(zmq_check_tcp_tipc)
message(STATUS "Checking whether TIPC is supported")
check_c_source_runs(
"
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/socket.h>
#include <linux/tipc.h>
int main(int argc, char *argv [])
{
struct sockaddr_tipc topsrv;
int sd = socket(PF_TIPC, SOCK_SEQPACKET, 0);
memset(&topsrv, 0, sizeof(topsrv));
topsrv.family = AF_TIPC;
topsrv.addrtype = TIPC_ADDR_NAME;
topsrv.addr.name.name.type = TIPC_TOP_SRV;
topsrv.addr.name.name.instance = TIPC_TOP_SRV;
fcntl(sd, F_SETFL, O_NONBLOCK);
tipc_addr(0, 0, 0);
}
"
ZMQ_HAVE_TIPC)
endmacro()
macro(zmq_check_pthread_setname)
message(STATUS "Checking pthread_setname signature")
set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
set(CMAKE_REQUIRED_FLAGS "-D_GNU_SOURCE -Werror -pthread")
check_c_source_compiles(
"
#include <pthread.h>
int main(int argc, char *argv [])
{
pthread_setname_np (\"foo\");
return 0;
}
"
ZMQ_HAVE_PTHREAD_SETNAME_1)
check_c_source_compiles(
"
#include <pthread.h>
int main(int argc, char *argv [])
{
pthread_setname_np (pthread_self(), \"foo\");
return 0;
}
"
ZMQ_HAVE_PTHREAD_SETNAME_2)
check_c_source_compiles(
"
#include <pthread.h>
int main(int argc, char *argv [])
{
pthread_setname_np (pthread_self(), \"foo\", (void *)0);
return 0;
}
"
ZMQ_HAVE_PTHREAD_SETNAME_3)
check_c_source_compiles(
"
#include <pthread.h>
int main(int argc, char *argv [])
{
pthread_set_name_np (pthread_self(), \"foo\");
return 0;
}
"
ZMQ_HAVE_PTHREAD_SET_NAME)
set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS})
endmacro()
macro(zmq_check_pthread_setaffinity)
message(STATUS "Checking pthread_setaffinity signature")
set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
set(CMAKE_REQUIRED_FLAGS "-D_GNU_SOURCE -Werror -pthread")
check_c_source_compiles(
"
#include <pthread.h>
int main(int argc, char *argv [])
{
cpu_set_t test;
pthread_setaffinity_np (pthread_self(), sizeof(cpu_set_t), &test);
return 0;
}
"
ZMQ_HAVE_PTHREAD_SET_AFFINITY)
set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS})
endmacro()
macro(zmq_check_getrandom)
message(STATUS "Checking whether getrandom is supported")
check_c_source_runs(
"
#include <sys/random.h>
int main (int argc, char *argv [])
{
char buf[4];
int rc = getrandom(buf, 4, 0);
return rc == -1 ? 1 : 0;
}
"
ZMQ_HAVE_GETRANDOM)
endmacro()
macro(zmq_check_noexcept)
message(STATUS "Checking whether noexcept is supported")
check_cxx_source_compiles(
"
struct X
{
X(int i) noexcept {}
};
int main(int argc, char *argv [])
{
X x(5);
return 0;
}
"
ZMQ_HAVE_NOEXCEPT)
endmacro()
macro(zmq_check_so_priority)
message(STATUS "Checking whether SO_PRIORITY is supported")
check_c_source_runs(
"
#include <sys/types.h>
#include <sys/socket.h>
int main (int argc, char *argv [])
{
int s, rc, opt = 1;
return (
((s = socket (PF_INET, SOCK_STREAM, 0)) == -1) ||
((rc = setsockopt (s, SOL_SOCKET, SO_PRIORITY, (char*) &opt, sizeof (int))) == -1)
);
}
"
ZMQ_HAVE_SO_PRIORITY)
endmacro()

View File

@ -1,5 +0,0 @@
macro (zmq_set_with_default var value)
if (NOT ${var})
set(${var} "${value}")
endif ()
endmacro ()

View File

@ -120,7 +120,7 @@ Var AR_RegFlags
"exit_${SecName}:"
!macroend
!macro RemoveSection_CPack SecName
!macro RemoveSection SecName
; This macro is used to call section's Remove_... macro
;from the uninstaller.
;Input: section index constant name specified in Section command.
@ -843,7 +843,7 @@ Section "Uninstall"
DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
; Removes all optional components
!insertmacro SectionList "RemoveSection_CPack"
!insertmacro SectionList "RemoveSection"
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
@ -851,7 +851,7 @@ Section "Uninstall"
@CPACK_NSIS_DELETE_ICONS@
@CPACK_NSIS_DELETE_ICONS_EXTRA@
;Delete empty start menu parent directories
;Delete empty start menu parent diretories
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
startMenuDeleteLoop:
@ -870,7 +870,7 @@ Section "Uninstall"
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
@CPACK_NSIS_DELETE_ICONS_EXTRA@
;Delete empty start menu parent directories
;Delete empty start menu parent diretories
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
secondStartMenuDeleteLoop:

View File

@ -120,7 +120,7 @@ Var AR_RegFlags
"exit_${SecName}:"
!macroend
!macro RemoveSection_CPack SecName
!macro RemoveSection SecName
; This macro is used to call section's Remove_... macro
;from the uninstaller.
;Input: section index constant name specified in Section command.
@ -846,7 +846,7 @@ Section "Uninstall"
DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
; Removes all optional components
!insertmacro SectionList "RemoveSection_CPack"
!insertmacro SectionList "RemoveSection"
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
@ -854,7 +854,7 @@ Section "Uninstall"
@CPACK_NSIS_DELETE_ICONS@
@CPACK_NSIS_DELETE_ICONS_EXTRA@
;Delete empty start menu parent directories
;Delete empty start menu parent diretories
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
startMenuDeleteLoop:
@ -873,7 +873,7 @@ Section "Uninstall"
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
@CPACK_NSIS_DELETE_ICONS_EXTRA@
;Delete empty start menu parent directories
;Delete empty start menu parent diretories
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
secondStartMenuDeleteLoop:

View File

@ -1,34 +0,0 @@
# ZeroMQ cmake module
#
# The following import targets are created
#
# ::
#
# libzmq-static
# libzmq
#
# This module sets the following variables in your project::
#
# ZeroMQ_FOUND - true if ZeroMQ found on the system
# ZeroMQ_INCLUDE_DIR - the directory containing ZeroMQ headers
# ZeroMQ_LIBRARY -
# ZeroMQ_STATIC_LIBRARY
@PACKAGE_INIT@
if(NOT TARGET libzmq AND NOT TARGET libzmq-static)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
if (TARGET libzmq)
get_target_property(@PROJECT_NAME@_INCLUDE_DIR libzmq INTERFACE_INCLUDE_DIRECTORIES)
else ()
get_target_property(@PROJECT_NAME@_INCLUDE_DIR libzmq-static INTERFACE_INCLUDE_DIRECTORIES)
endif()
if (TARGET libzmq)
get_target_property(@PROJECT_NAME@_LIBRARY libzmq LOCATION)
endif()
if (TARGET libzmq-static)
get_target_property(@PROJECT_NAME@_STATIC_LIBRARY libzmq-static LOCATION)
endif()
endif()

View File

@ -1,126 +0,0 @@
#!/usr/bin/env bash
set -x -e
cd ../..
# always install custom builds from dist
# to make sure that `make dist` doesn't omit any files required to build & test
if [ -z "$DO_CLANG_FORMAT_CHECK" -a -z "$CLANG_TIDY" ]; then
./autogen.sh
./configure
make -j5 dist-gzip
V=$(./version.sh)
tar -xzf zeromq-$V.tar.gz
cd zeromq-$V
fi
mkdir tmp || true
BUILD_PREFIX=$PWD/tmp
CONFIG_OPTS=()
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")
CMAKE_OPTS=()
CMAKE_OPTS+=("-DCMAKE_INSTALL_PREFIX:PATH=${BUILD_PREFIX}")
CMAKE_OPTS+=("-DCMAKE_PREFIX_PATH:PATH=${BUILD_PREFIX}")
CMAKE_OPTS+=("-DCMAKE_LIBRARY_PATH:PATH=${BUILD_PREFIX}/lib")
CMAKE_OPTS+=("-DCMAKE_INCLUDE_PATH:PATH=${BUILD_PREFIX}/include")
CMAKE_OPTS+=("-DENABLE_CAPSH=ON")
CMAKE_OPTS+=("-DBUILD_TESTS=ON")
if [ "$CLANG_FORMAT" != "" ] ; then
CMAKE_OPTS+=("-DCLANG_FORMAT=${CLANG_FORMAT}")
fi
if [ -z $CURVE ]; then
CMAKE_OPTS+=("-DENABLE_CURVE=OFF")
elif [ $CURVE == "libsodium" ]; then
CMAKE_OPTS+=("-DWITH_LIBSODIUM=ON")
if ! ((command -v dpkg-query >/dev/null 2>&1 && dpkg-query --list libsodium-dev >/dev/null 2>&1) || \
(command -v brew >/dev/null 2>&1 && brew ls --versions libsodium >/dev/null 2>&1)); then
git clone --depth 1 -b stable https://github.com/jedisct1/libsodium.git
( cd libsodium; ./autogen.sh; ./configure --prefix=$BUILD_PREFIX; make install)
fi
fi
if [ "$GSSAPI" == "enabled" ]; then
CMAKE_OPTS+=("-DWITH_GSSAPI_KRB5=ON")
fi
CMAKE_PREFIXES=()
MAKE_PREFIXES=()
PARALLEL_MAKE_OPT="-j5"
if [ -n "$CLANG_TIDY" ] ; then
# To allow sonar to process history information, unshallow clone first.
git fetch --unshallow
curl -L https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip -o build-wrapper-linux-x86.zip
unzip build-wrapper-linux-x86.zip
export SONARCLOUD_BUILD_WRAPPER_PATH="${PWD}/build-wrapper-linux-x86/"
curl -L https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip -o sonar-scanner-cli.zip
unzip sonar-scanner-cli.zip
export SONAR_SCANNER_CLI_PATH="${PWD}/sonar-scanner-4.2.0.1873-linux/bin/"
CMAKE_OPTS+=("-DCMAKE_BUILD_TYPE=Debug") # do a debug build to avoid unused variable warnings with assertions, and to speed up build
CMAKE_OPTS+=("-DCMAKE_CXX_CLANG_TIDY:STRING=${CLANG_TIDY}")
if [ -n ${SONARCLOUD_BUILD_WRAPPER_PATH} ] ; then
MAKE_PREFIXES+=("${SONARCLOUD_BUILD_WRAPPER_PATH}build-wrapper-linux-x86-64")
MAKE_PREFIXES+=("--out-dir")
MAKE_PREFIXES+=("${TRAVIS_BUILD_DIR}/bw-output")
fi
CMAKE_PREFIXES+=("scan-build-10")
MAKE_PREFIXES+=("scan-build-10")
MAKE_PREFIXES+=("-plist-html")
SCAN_BUILD_OUTPUT="$(pwd)/scan-build-report"
MAKE_PREFIXES+=("-o ${SCAN_BUILD_OUTPUT}")
# TODO this does not work with sonarcloud.io as it misses the sonar-cxx plugin
#MAKE_PREFIXES+=("-plist")
IFS="/" read -ra GITHUB_USER <<< "${TRAVIS_REPO_SLUG}"
PARALLEL_MAKE_OPT=""
fi
# Build, check, and install from local source
mkdir build_cmake
cd build_cmake
if [ "$DO_CLANG_FORMAT_CHECK" = "1" ] ; then
if ! ( PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig cmake "${CMAKE_OPTS[@]}" .. && make clang-format-check) ; then
echo "clang-format version is: $(clang-format --version)"
make clang-format-diff
exit 1
fi
else
if [ -n "$CLANG_TIDY" ] ; then
${CLANG_TIDY} -explain-config
fi
export CTEST_OUTPUT_ON_FAILURE=1
PKG_CONFIG_PATH=${BUILD_PREFIX}/lib/pkgconfig ${CMAKE_PREFIXES[@]} cmake "${CMAKE_OPTS[@]}" ..
${MAKE_PREFIXES[@]} make ${PARALLEL_MAKE_OPT} all VERBOSE=1 | tee clang-tidy-report
if [ -n "${SONAR_SCANNER_CLI_PATH}" ] ; then
find ${SCAN_BUILD_OUTPUT} || echo "WARNING: ${SCAN_BUILD_OUTPUT} does not exist"
${SONAR_SCANNER_CLI_PATH}sonar-scanner \
-Dsonar.projectKey=${GITHUB_USER}-libzmq \
-Dsonar.organization=${GITHUB_USER}-github \
-Dsonar.projectBaseDir=.. \
-Dsonar.sources=${TRAVIS_BUILD_DIR}/include,${TRAVIS_BUILD_DIR}/src,${TRAVIS_BUILD_DIR}/tests,${TRAVIS_BUILD_DIR}/unittests \
-Dsonar.cfamily.build-wrapper-output=${TRAVIS_BUILD_DIR}/bw-output \
-Dsonar.host.url=https://sonarcloud.io \
-Dsonar.login=${SONARQUBE_TOKEN}
# TODO this does not work with sonarcloud.io as it misses the sonar-cxx plugin
# -Dsonar.cxx.clangtidy.reportPath=clang-tidy-report \
# -Dsonar.cxx.clangsa.reportPath=*.plist \
fi
make install
make ${PARALLEL_MAKE_OPT} test ARGS="-V"
fi

View File

@ -1,14 +0,0 @@
#!/bin/sh
FAILED=0
IFS=";"
FILES="@ALL_SOURCE_FILES@"
IDS=$(echo -en "\n\b")
for FILE in $FILES
do
@CLANG_FORMAT@ -style=file -output-replacements-xml "$FILE" | grep "<replacement " >/dev/null &&
{
echo "$FILE is not correctly formatted"
FAILED=1
}
done
if [ "$FAILED" -eq "1" ] ; then exit 1 ; fi

View File

@ -1,92 +1,40 @@
#ifndef __ZMQ_PLATFORM_HPP_INCLUDED__
#define __ZMQ_PLATFORM_HPP_INCLUDED__
#cmakedefine ZMQ_USE_CV_IMPL_STL11
#cmakedefine ZMQ_USE_CV_IMPL_WIN32API
#cmakedefine ZMQ_USE_CV_IMPL_PTHREADS
#cmakedefine ZMQ_USE_CV_IMPL_NONE
#cmakedefine ZMQ_IOTHREAD_POLLER_USE_KQUEUE
#cmakedefine ZMQ_IOTHREAD_POLLER_USE_EPOLL
#cmakedefine ZMQ_IOTHREAD_POLLER_USE_EPOLL_CLOEXEC
#cmakedefine ZMQ_IOTHREAD_POLLER_USE_DEVPOLL
#cmakedefine ZMQ_IOTHREAD_POLLER_USE_POLLSET
#cmakedefine ZMQ_IOTHREAD_POLLER_USE_POLL
#cmakedefine ZMQ_IOTHREAD_POLLER_USE_SELECT
#cmakedefine ZMQ_HAVE_PPOLL
#cmakedefine ZMQ_POLL_BASED_ON_SELECT
#cmakedefine ZMQ_POLL_BASED_ON_POLL
#cmakedefine HAVE_POSIX_MEMALIGN @HAVE_POSIX_MEMALIGN@
#cmakedefine ZMQ_CACHELINE_SIZE @ZMQ_CACHELINE_SIZE@
#cmakedefine ZMQ_FORCE_SELECT
#cmakedefine ZMQ_FORCE_POLL
#cmakedefine ZMQ_FORCE_EPOLL
#cmakedefine ZMQ_FORCE_DEVPOLL
#cmakedefine ZMQ_FORCE_KQUEUE
#cmakedefine ZMQ_FORCE_SELECT
#cmakedefine ZMQ_FORCE_POLL
#cmakedefine ZMQ_FORCE_MUTEXES
#cmakedefine HAVE_FORK
#cmakedefine HAVE_CLOCK_GETTIME
#cmakedefine HAVE_GETHRTIME
#cmakedefine HAVE_MKDTEMP
#cmakedefine ZMQ_HAVE_UIO
#cmakedefine ZMQ_HAVE_NOEXCEPT
#cmakedefine ZMQ_HAVE_EVENTFD
#cmakedefine ZMQ_HAVE_EVENTFD_CLOEXEC
#cmakedefine ZMQ_HAVE_IFADDRS
#cmakedefine ZMQ_HAVE_SO_BINDTODEVICE
#cmakedefine ZMQ_HAVE_SO_PEERCRED
#cmakedefine ZMQ_HAVE_LOCAL_PEERCRED
#cmakedefine ZMQ_HAVE_BUSY_POLL
#cmakedefine ZMQ_HAVE_O_CLOEXEC
#cmakedefine ZMQ_HAVE_SOCK_CLOEXEC
#cmakedefine ZMQ_HAVE_SO_KEEPALIVE
#cmakedefine ZMQ_HAVE_SO_PRIORITY
#cmakedefine ZMQ_HAVE_TCP_KEEPCNT
#cmakedefine ZMQ_HAVE_TCP_KEEPIDLE
#cmakedefine ZMQ_HAVE_TCP_KEEPINTVL
#cmakedefine ZMQ_HAVE_TCP_KEEPALIVE
#cmakedefine ZMQ_HAVE_PTHREAD_SETNAME_1
#cmakedefine ZMQ_HAVE_PTHREAD_SETNAME_2
#cmakedefine ZMQ_HAVE_PTHREAD_SETNAME_3
#cmakedefine ZMQ_HAVE_PTHREAD_SET_NAME
#cmakedefine ZMQ_HAVE_PTHREAD_SET_AFFINITY
#cmakedefine HAVE_ACCEPT4
#cmakedefine HAVE_STRNLEN
#cmakedefine ZMQ_HAVE_STRLCPY
#cmakedefine ZMQ_HAVE_LIBBSD
#cmakedefine ZMQ_HAVE_IPC
#cmakedefine ZMQ_HAVE_STRUCT_SOCKADDR_UN
#cmakedefine ZMQ_USE_BUILTIN_SHA1
#cmakedefine ZMQ_USE_NSS
#cmakedefine ZMQ_HAVE_WS
#cmakedefine ZMQ_HAVE_WSS
#cmakedefine ZMQ_HAVE_TIPC
#cmakedefine ZMQ_HAVE_OPENPGM
#cmakedefine ZMQ_HAVE_NORM
#cmakedefine ZMQ_HAVE_VMCI
#cmakedefine ZMQ_MAKE_VALGRIND_HAPPY
#cmakedefine ZMQ_HAVE_CURVE
#cmakedefine ZMQ_USE_LIBSODIUM
#cmakedefine SODIUM_STATIC
#cmakedefine HAVE_LIBGSSAPI_KRB5
#cmakedefine ZMQ_USE_GNUTLS
#cmakedefine ZMQ_USE_RADIX_TREE
#cmakedefine HAVE_IF_NAMETOINDEX
#ifdef _AIX
#define ZMQ_HAVE_AIX
#endif
#if defined __ANDROID__
#if defined ANDROID
#define ZMQ_HAVE_ANDROID
#endif
@ -98,15 +46,10 @@
#define ZMQ_HAVE_MINGW32
#endif
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
#define ZMQ_HAVE_FREEBSD
#endif
#if defined(__DragonFly__)
#define ZMQ_HAVE_FREEBSD
#define ZMQ_HAVE_DRAGONFLY
#endif
#if defined __hpux
#define ZMQ_HAVE_HPUX
#endif
@ -123,10 +66,8 @@
#define ZMQ_HAVE_OPENBSD
#endif
// TODO better move OS-specific defines to the automake files, and check for availability of IPC with an explicit test there
#if defined __VMS
#define ZMQ_HAVE_OPENVMS
#undef ZMQ_HAVE_IPC
#endif
#if defined __APPLE__
@ -142,6 +83,6 @@
#endif
#cmakedefine ZMQ_HAVE_WINDOWS
#cmakedefine ZMQ_HAVE_WINDOWS_UWP
#endif

View File

@ -1,14 +0,0 @@
#!/usr/bin/env bash
set -x
mkdir tmp
BUILD_PREFIX=$PWD/tmp
source ../../config.sh
set_config_opts
CONFIG_OPTS+=("--enable-code-coverage")
# Build, check, and install from local source
( cd ../..; ./autogen.sh && ./configure "${CONFIG_OPTS[@]}" && make VERBOSE=1 -j5 check-code-coverage CODE_COVERAGE_OUTPUT_FILE=lcov.info CODE_COVERAGE_OUTPUT_DIRECTORY=coverage) || exit 1

View File

@ -1,48 +0,0 @@
CC=gcc
CFLAGS=-Wall -Os -g -DDLL_EXPORT -DFD_SETSIZE=16384 -DZMQ_USE_SELECT -I.
LIBS=-lws2_32
OBJS = ctx.o reaper.o dist.o err.o \
clock.o metadata.o random.o \
object.o own.o \
io_object.o io_thread.o \
lb.o fq.o \
address.o tcp_address.o ipc_address.o \
ipc_connecter.o ipc_listener.o \
tcp_connecter.o tcp_listener.o \
mailbox.o msg.o mtrie.o \
pipe.o precompiled.o proxy.o \
signaler.o stream_engine.o \
thread.o trie.o \
ip.o tcp.o \
pgm_socket.o pgm_receiver.o pgm_sender.o \
raw_decoder.o raw_encoder.o \
v1_decoder.o v1_encoder.o v2_decoder.o v2_encoder.o \
udp_address.o upd_engine.o radio.o dish.o \
socket_base.o session_base.o options.o \
req.o rep.o push.o pull.o pub.o sub.o pair.o \
dealer.o router.o xpub.o xsub.o stream.o \
poller_base.o select.o poll.o epoll.o kqueue.o devpoll.o \
curve_client.o curve_server.o \
mechanism.o null_mechanism.o plain_client.o plain_server.o \
zmq.o zmq_utils.o
%.o: ../../src/%.cpp
$(CC) -c -o $@ $< $(CFLAGS)
%.o: ../../perf/%.cpp
$(CC) -c -o $@ $< $(CFLAGS)
all: libzmq.dll
perf: inproc_lat.exe inproc_thr.exe local_lat.exe local_thr.exe remote_lat.exe remote_thr.exe
libzmq.dll: $(OBJS)
g++ -shared -o $@ $^ -Wl,--out-implib,-Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--whole-archive $@.a -Wl,--no-whole-archive $(LIBS)
%.exe: %.o libzmq.dll
g++ -o $@ $^
clean:
del *.o *.a *.dll *.exe

View File

@ -1,256 +0,0 @@
## Visual Studio 2015 experimental Visual C/C++ Intellisense database
*.VC.db
## From https://github.com/github/gitignore
##
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml

View File

@ -1,94 +0,0 @@
LIBZMQ_DIST = vs2008/libzmq.sln \
vs2008/libzmq/libzmq.vcproj \
vs2010/libzmq.sln \
vs2010/libzmq/libzmq.vcxproj \
vs2010/libzmq/libzmq.vcxproj.filters \
vs2012/libzmq.sln \
vs2012/libzmq/libzmq.vcxproj \
vs2012/libzmq/libzmq.vcxproj.filters \
vs2013/libzmq.sln \
vs2013/libzmq/libzmq.vcxproj \
vs2013/libzmq/libzmq.vcxproj.filters \
vs2015/libzmq.sln \
vs2015/libzmq/libzmq.vcxproj \
vs2015/libzmq/libzmq.vcxproj.filters \
vs2015/libzmq/libzmq.props \
vs2015/libzmq/libzmq.xml \
vs2015/libzmq.import.props \
vs2015/libzmq.import.xml \
errno.cpp \
errno.hpp \
platform.hpp \
resource.h \
resource.rc
PERF_DIST = vs2008/local_lat/local_lat.vcproj \
vs2008/local_thr/local_thr.vcproj \
vs2008/remote_lat/remote_lat.vcproj \
vs2008/remote_thr/remote_thr.vcproj \
vs2008/inproc_lat/inproc_lat.vcproj \
vs2008/inproc_thr/inproc_thr.vcproj \
vs2010/local_lat/local_lat.vcxproj \
vs2010/local_thr/local_thr.vcxproj \
vs2010/remote_lat/remote_lat.vcxproj \
vs2010/remote_thr/remote_thr.vcxproj \
vs2010/inproc_lat/inproc_lat.vcxproj \
vs2010/inproc_thr/inproc_thr.vcxproj \
vs2012/local_lat/local_lat.vcxproj \
vs2012/local_thr/local_thr.vcxproj \
vs2012/remote_lat/remote_lat.vcxproj \
vs2012/remote_thr/remote_thr.vcxproj \
vs2012/inproc_lat/inproc_lat.vcxproj \
vs2012/inproc_thr/inproc_thr.vcxproj \
vs2013/local_lat/local_lat.vcxproj \
vs2013/local_thr/local_thr.vcxproj \
vs2013/remote_lat/remote_lat.vcxproj \
vs2013/remote_thr/remote_thr.vcxproj \
vs2013/inproc_lat/inproc_lat.vcxproj \
vs2013/inproc_thr/inproc_thr.vcxproj \
vs2015/local_lat/local_lat.vcxproj \
vs2015/local_lat/local_lat.props \
vs2015/local_thr/local_thr.vcxproj \
vs2015/local_thr/local_thr.props \
vs2015/remote_lat/remote_lat.vcxproj \
vs2015/remote_lat/remote_lat.props \
vs2015/remote_thr/remote_thr.vcxproj \
vs2015/remote_thr/remote_thr.props \
vs2015/inproc_lat/inproc_lat.vcxproj \
vs2015/inproc_lat/inproc_lat.props \
vs2015/inproc_thr/inproc_thr.vcxproj \
vs2015/inproc_thr/inproc_thr.props
PROPERTIES_DIST = properties/Common.props \
properties/Debug.props \
properties/DebugDEXE.props \
properties/DebugDLL.props \
properties/DebugLEXE.props \
properties/DebugLIB.props \
properties/DebugLTCG.props \
properties/DebugSEXE.props \
properties/DLL.props \
properties/EXE.props \
properties/LIB.props \
properties/Link.props \
properties/LTCG.props \
properties/Messages.props \
properties/Output.props \
properties/Release.props \
properties/ReleaseDEXE.props \
properties/ReleaseDLL.props \
properties/ReleaseLEXE.props \
properties/ReleaseLIB.props \
properties/ReleaseLTCG.props \
properties/ReleaseSEXE.props \
properties/Win32.props \
properties/x64.props
PRECOMPILED_DIST = ../../src/precompiled.hpp \
../../src/precompiled.cpp
BUILD_DIST = build/build.bat \
build/buildall.bat \
build/buildbase.bat
EXTRA_DIST = $(LIBZMQ_DIST) $(PERF_DIST) $(PROPERTIES_DIST) $(PRECOMPILED_DIST) $(BUILD_DIST)

View File

@ -1,33 +0,0 @@
@ECHO OFF
:: Usage: build.bat [Clean]
@setlocal
:: validate environment
if "%VSINSTALLDIR%" == "" @echo Error: Attempt to build without proper DevStudio environment.&@goto :done
:: record starting time
set STARTTIME=%DATE% %TIME%
@echo Start Time: %STARTTIME%
:: validate optional argument (and make sure it is spelled "Clean")
set MAKECLEAN=%%1
if NOT "%%1" == "" if /I "%%1" == "clean" set MAKECLEAN=Clean
::
:: uses the environment from the DevStudio CMD window to figure out which version to build
::
set VSVER=%VSINSTALLDIR:~-5,2%
set DIRVER=%VSVER%
if %VSVER% gtr 10 set /a DIRVER = DIRVER + 1
CALL buildbase.bat ..\vs20%DIRVER%\libzmq.sln %VSVER% %MAKECLEAN%
set STOPTIME=%DATE% %TIME%
@echo Stop Time: %STOPTIME%
@echo Start Time: %STARTTIME%
:done
@endlocal

View File

@ -1,16 +0,0 @@
@ECHO OFF
:: Usage: buildall.bat
:: Build all configurations for all solutions.
call buildbase.bat ..\vs2017\libzmq.sln 15
ECHO.
CALL buildbase.bat ..\vs2015\libzmq.sln 14
ECHO.
CALL buildbase.bat ..\vs2013\libzmq.sln 12
ECHO.
CALL buildbase.bat ..\vs2012\libzmq.sln 11
ECHO.
CALL buildbase.bat ..\vs2010\libzmq.sln 10
ECHO.
PAUSE

View File

@ -1,73 +0,0 @@
@ECHO OFF
@setlocal
REM Usage: [buildbase.bat ..\vs2013\mysolution.sln 12 [Clean]]
SET solution=%1
SET version=%2
:: supports passing in Clean as third argument if "make clean" behavior is desired
SET target=%3
SET ACTION=Building
if NOT "%target%" == "" set target=/t:%target%&set ACTION=Cleaning
SET log=build_%version%.log
SET tools=Microsoft Visual Studio %version%.0\VC\vcvarsall.bat
if "%version%" == "15" SET tools=Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat
SET environment="%programfiles(x86)%\%tools%"
IF NOT EXIST %environment% SET environment="%programfiles%\%tools%"
IF NOT EXIST %environment% GOTO no_tools
@ECHO %ACTION% %solution%
SET __CURRENT_DIR__=%CD%
CALL %environment% x86 >%SystemDrive%\nul 2>&1
ECHO Platform=x86 2> %log%
CD /D %__CURRENT_DIR__%
SET __CURRENT_DIR__=
ECHO Configuration=DynDebug
msbuild /m /v:n /p:Configuration=DynDebug /p:Platform=Win32 %solution% %target%>> %log% || GOTO error
ECHO Configuration=DynRelease
msbuild /m /v:n /p:Configuration=DynRelease /p:Platform=Win32 %solution% %target%>> %log% || GOTO error
ECHO Configuration=LtcgDebug
msbuild /m /v:n /p:Configuration=LtcgDebug /p:Platform=Win32 %solution% %target%>> %log% || GOTO error
ECHO Configuration=LtcgRelease
msbuild /m /v:n /p:Configuration=LtcgRelease /p:Platform=Win32 %solution% %target%>> %log% || GOTO error
ECHO Configuration=StaticDebug
msbuild /m /v:n /p:Configuration=StaticDebug /p:Platform=Win32 %solution% %target%>> %log% || GOTO error
ECHO Configuration=StaticRelease
msbuild /m /v:n /p:Configuration=StaticRelease /p:Platform=Win32 %solution% %target%>> %log% || GOTO error
SET __CURRENT_DIR__=%CD%
CALL %environment% x86_amd64 >%SystemDrive%\nul 2>&1
ECHO Platform=x64
CD /D %__CURRENT_DIR__%
SET __CURRENT_DIR__=
ECHO Configuration=DynDebug
msbuild /m /v:n /p:Configuration=DynDebug /p:Platform=x64 %solution% %target%>> %log% || GOTO error
ECHO Configuration=DynRelease
msbuild /m /v:n /p:Configuration=DynRelease /p:Platform=x64 %solution% %target%>> %log% || GOTO error
ECHO Configuration=LtcgDebug
msbuild /m /v:n /p:Configuration=LtcgDebug /p:Platform=x64 %solution% %target%>> %log% || GOTO error
ECHO Configuration=LtcgRelease
msbuild /m /v:n /p:Configuration=LtcgRelease /p:Platform=x64 %solution% %target%>> %log% || GOTO error
ECHO Configuration=StaticDebug
msbuild /m /v:n /p:Configuration=StaticDebug /p:Platform=x64 %solution% %target%>> %log% || GOTO error
ECHO Configuration=StaticRelease
msbuild /m /v:n /p:Configuration=StaticRelease /p:Platform=x64 %solution% %target%>> %log% || GOTO error
ECHO %ACTION% complete: %solution%
GOTO end
:error
ECHO *** ERROR, build terminated early, see: %log%
GOTO end
:no_tools
ECHO *** ERROR, build tools not found: %tools%
:end
@endlocal

View File

@ -1,32 +0,0 @@
#if defined _WIN32_WCE
//#include "..\..\include\zmq.h"
#include "..\..\src\err.hpp"
int errno;
int _doserrno;
int _sys_nerr;
char* error_desc_buff = NULL;
char* strerror(int errno)
{
if (NULL != error_desc_buff)
{
LocalFree(error_desc_buff);
error_desc_buff = NULL;
}
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
errno,
0,
(LPTSTR)&error_desc_buff,
1024,
NULL
);
return error_desc_buff;
}
#endif

View File

@ -1,14 +0,0 @@
#ifndef __PLATFORM_HPP_INCLUDED__
#define __PLATFORM_HPP_INCLUDED__
#define ZMQ_HAVE_WINDOWS
// MSVC build configuration is controlled via options exposed in the Visual
// Studio user interface. The option to use libsodium is not exposed in the
// user interface unless a sibling `libsodium` directory to that of this
// repository exists and contains the following files:
//
// \builds\msvc\vs2015\libsodium.import.props
// \builds\msvc\vs2015\libsodium.import.xml
#endif

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Common Settings</_PropertySheetDisplayName>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(Platform).props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<PreprocessorDefinitions>UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Dynamic Library</_PropertySheetDisplayName>
<DefaultLinkage>dynamic</DefaultLinkage>
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_DLL;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="Common.props" />
</ImportGroup>
<PropertyGroup>
<_PropertySheetDisplayName>Debug Settings</_PropertySheetDisplayName>
<DebugOrRelease>Debug</DebugOrRelease>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<FunctionLevelLinking>true</FunctionLevelLinking>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
</Project>

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Console Debug Dynamic</_PropertySheetDisplayName>
<DefaultLinkage>dynamic</DefaultLinkage>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Debug.props" />
<Import Project="EXE.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<LinkIncremental>true</LinkIncremental>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Dynamic Debug Library</_PropertySheetDisplayName>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Debug.props" />
<Import Project="DLL.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<LinkIncremental>true</LinkIncremental>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Console Debug Link Time Code Generation</_PropertySheetDisplayName>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Debug.props" />
<Import Project="Link.props" />
<Import Project="EXE.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Static Debug Library</_PropertySheetDisplayName>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Debug.props" />
<Import Project="LIB.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<LinkIncremental>true</LinkIncremental>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Static Debug Link Time Code Generation Library</_PropertySheetDisplayName>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Debug.props" />
<Import Project="LTCG.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Console Debug Static</_PropertySheetDisplayName>
<DefaultLinkage>static</DefaultLinkage>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Debug.props" />
<Import Project="EXE.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<LinkIncremental>true</LinkIncremental>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Console Application</_PropertySheetDisplayName>
<IsExe>true</IsExe>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
</Project>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Static Library</_PropertySheetDisplayName>
<DefaultLinkage>static</DefaultLinkage>
<TargetExt>.lib</TargetExt>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Link Time Code Generation Library</_PropertySheetDisplayName>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="LIB.props" />
<Import Project="Link.props" />
</ImportGroup>
</Project>

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Link Time Code Generation Settings</_PropertySheetDisplayName>
<DefaultLinkage>ltcg</DefaultLinkage>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<WholeProgramOptimization>true</WholeProgramOptimization>
</ClCompile>
<Link>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
<Lib>
<LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
</Lib>
</ItemDefinitionGroup>
</Project>

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Build Messages</_PropertySheetDisplayName>
</PropertyGroup>
<Target Name="ConfigInfo" BeforeTargets="PrepareForBuild">
<Message Text="ConfigurationType : $(ConfigurationType)" Importance="high"/>
<Message Text="Configuration : $(Configuration)" Importance="high"/>
<Message Text="PlatformToolset : $(PlatformToolset)" Importance="high"/>
<Message Text="TargetPath : $(TargetPath)" Importance="high"/>
</Target>
</Project>

View File

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Output Settings</_PropertySheetDisplayName>
<!-- BuildRoot, RepoRoot, SourceRoot, DebugOrRelease and DefaultLinkage are custom props and should therefore not be referenced from *.import.props or nuget target files. -->
<BuildRoot>$(ProjectDir)..\..\</BuildRoot>
<RepoRoot>$(ProjectDir)..\..\..\..\</RepoRoot>
<SourceRoot>$(ProjectDir)..\..\..\..\..\</SourceRoot>
<OutDir>$(ProjectDir)..\..\..\..\bin\$(PlatformName)\$(DebugOrRelease)\$(PlatformToolset)\$(DefaultLinkage)\</OutDir>
<IntDir>$(ProjectDir)..\..\..\..\obj\$(TargetName)\$(PlatformName)\$(DebugOrRelease)\$(PlatformToolset)\$(DefaultLinkage)\</IntDir>
<TargetDir>$(OutDir)</TargetDir>
<TargetName>$(TargetName)</TargetName>
<TargetPath>$(TargetDir)$(TargetName)$(TargetExt)</TargetPath>
</PropertyGroup>
<ItemDefinitionGroup>
<Link>
<ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
</Link>
<BuildLog>
<Path>$(OutDir)$(TargetName).log</Path>
</BuildLog>
</ItemDefinitionGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Messages.props" />
</ImportGroup>
</Project>

View File

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="Common.props" />
</ImportGroup>
<PropertyGroup>
<_PropertySheetDisplayName>Release Settings</_PropertySheetDisplayName>
<DebugOrRelease>Release</DebugOrRelease>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalOptions>/Oy- %(AdditionalOptions)</AdditionalOptions>
<!--<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>-->
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<MinimalRebuild>false</MinimalRebuild>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<!--<GenerateDebugInformation>true</GenerateDebugInformation>-->
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Processor)' == 'x86'">
<ClCompile>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Console Release Dynamic</_PropertySheetDisplayName>
<DefaultLinkage>dynamic</DefaultLinkage>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Release.props" />
<Import Project="EXE.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Dynamic Release Library</_PropertySheetDisplayName>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Release.props" />
<Import Project="DLL.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Console Release Link Time Code Generation</_PropertySheetDisplayName>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Release.props" />
<Import Project="Link.props" />
<Import Project="EXE.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Static Release Library</_PropertySheetDisplayName>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Release.props" />
<Import Project="LIB.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Static Release Link Time Code Generation Library</_PropertySheetDisplayName>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Release.props" />
<Import Project="LTCG.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>Console Release Static</_PropertySheetDisplayName>
<DefaultLinkage>static</DefaultLinkage>
</PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="Release.props" />
<Import Project="EXE.props" />
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
</Project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>x86 Settings</_PropertySheetDisplayName>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>WIN32;_WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
</Link>
<Lib>
<AdditionalOptions>/MACHINE:X86 %(AdditionalOptions)</AdditionalOptions>
</Lib>
</ItemDefinitionGroup>
</Project>

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PropertySheetDisplayName>x64 Settings</_PropertySheetDisplayName>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<!-- Note that Win64 defines may cause WIN32 to become defined when using windows headers,
but _WIN32 implies Windows 32 bit or above. If the standard headers are not included
these are sometimes required even for 64 bit builds and should never cause harm there.-->
<PreprocessorDefinitions>WIN32;_WIN32;WIN64;_WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<TargetMachine>MachineX64</TargetMachine>
</Link>
<Lib>
<AdditionalOptions>/MACHINE:X64 %(AdditionalOptions)</AdditionalOptions>
</Lib>
</ItemDefinitionGroup>
</Project>

View File

@ -1,27 +0,0 @@
For building on Windows, use:
cd build
./build.bat
This requires that the CMD.EXE be created using the DevStudio Tools link to create a CMD.EXE window. Also, make sure that the name of the project folder is libzmq (not e.g. libzmq-master) as this is required for correct linking.
Visual Studio product and C++ compiler Versions:
Visual C++ 2008 => Visual C++ 9
Visual C++ 2010 => Visual C++ 10
Visual C++ 2012 => Visual C++ 11
Visual C++ 2013 => Visual C++ 12
Visual C++ 2015 => Visual C++ 14
Visual C++ 2017 => Visual C++ 15
Note that solution file icons reflect the compiler version ([9], [10], [11], [12], [14], [15]), not the product version.
The vs2017/vs2015/vs2013/vs2012/vs2010 solution and project files differ only in versioning.
More info here:
http://en.wikipedia.org/wiki/Visual_C%2B%2B
If multiple DevStudio versions are installed, you can run build.bat in separate windows each created by the desired DevStudio target.
To build for all versions of Visual Studio (excluding vs2008), you can run buildall.bat. This is generally a maintainer task.

View File

@ -1,14 +0,0 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by resource.rc
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

Some files were not shown because too many files have changed in this diff Show More