From dc4e1ae7f23bd5e9d57f489848f3f1aa5f2a0a05 Mon Sep 17 00:00:00 2001 From: leebj Date: Fri, 28 Nov 2025 09:11:50 +0900 Subject: [PATCH] no message --- .../CMakeDirectoryInformation.cmake | 16 + librab/build/tests/CMakeFiles/progress.marks | 1 + .../CMakeFiles/test_basic.dir/C.includecache | 54 ++ .../test_basic.dir/DependInfo.cmake | 29 ++ .../CMakeFiles/test_basic.dir/build.make | 108 ++++ .../test_basic.dir/cmake_clean.cmake | 10 + .../CMakeFiles/test_basic.dir/depend.internal | 9 + .../CMakeFiles/test_basic.dir/depend.make | 9 + .../CMakeFiles/test_basic.dir/flags.make | 8 + .../tests/CMakeFiles/test_basic.dir/link.txt | 1 + .../CMakeFiles/test_basic.dir/progress.make | 2 + .../test_hostcheck.dir/C.includecache | 30 ++ .../test_hostcheck.dir/DependInfo.cmake | 29 ++ .../CMakeFiles/test_hostcheck.dir/build.make | 131 +++++ .../test_hostcheck.dir/cmake_clean.cmake | 11 + .../test_hostcheck.dir/depend.internal | 10 + .../CMakeFiles/test_hostcheck.dir/depend.make | 10 + .../CMakeFiles/test_hostcheck.dir/flags.make | 8 + .../CMakeFiles/test_hostcheck.dir/link.txt | 1 + .../test_hostcheck.dir/progress.make | 3 + .../C.includecache | 74 +++ .../DependInfo.cmake | 29 ++ .../test_merge_capabilities.dir/build.make | 108 ++++ .../cmake_clean.cmake | 10 + .../depend.internal | 12 + .../test_merge_capabilities.dir/depend.make | 12 + .../test_merge_capabilities.dir/flags.make | 8 + .../test_merge_capabilities.dir/link.txt | 1 + .../test_merge_capabilities.dir/progress.make | 2 + .../test_parse_url.dir/C.includecache | 38 ++ .../test_parse_url.dir/DependInfo.cmake | 29 ++ .../CMakeFiles/test_parse_url.dir/build.make | 108 ++++ .../test_parse_url.dir/cmake_clean.cmake | 10 + .../test_parse_url.dir/depend.internal | 8 + .../CMakeFiles/test_parse_url.dir/depend.make | 8 + .../CMakeFiles/test_parse_url.dir/flags.make | 8 + .../CMakeFiles/test_parse_url.dir/link.txt | 1 + .../test_parse_url.dir/progress.make | 2 + .../test_sasl_mechanism.dir/C.includecache | 68 +++ .../test_sasl_mechanism.dir/DependInfo.cmake | 29 ++ .../test_sasl_mechanism.dir/build.make | 108 ++++ .../test_sasl_mechanism.dir/cmake_clean.cmake | 10 + .../test_sasl_mechanism.dir/depend.internal | 11 + .../test_sasl_mechanism.dir/depend.make | 11 + .../test_sasl_mechanism.dir/flags.make | 8 + .../test_sasl_mechanism.dir/link.txt | 1 + .../test_sasl_mechanism.dir/progress.make | 2 + .../test_status_enum.dir/C.includecache | 36 ++ .../test_status_enum.dir/DependInfo.cmake | 29 ++ .../test_status_enum.dir/build.make | 108 ++++ .../test_status_enum.dir/cmake_clean.cmake | 10 + .../test_status_enum.dir/depend.internal | 8 + .../test_status_enum.dir/depend.make | 8 + .../test_status_enum.dir/flags.make | 8 + .../CMakeFiles/test_status_enum.dir/link.txt | 1 + .../test_status_enum.dir/progress.make | 2 + .../CMakeFiles/test_tables.dir/C.includecache | 40 ++ .../test_tables.dir/DependInfo.cmake | 29 ++ .../CMakeFiles/test_tables.dir/build.make | 108 ++++ .../test_tables.dir/cmake_clean.cmake | 10 + .../test_tables.dir/depend.internal | 7 + .../CMakeFiles/test_tables.dir/depend.make | 7 + .../CMakeFiles/test_tables.dir/flags.make | 8 + .../tests/CMakeFiles/test_tables.dir/link.txt | 1 + .../CMakeFiles/test_tables.dir/progress.make | 2 + librab/build/tests/CMakeLists.txt | 47 ++ librab/build/tests/CTestTestfile.cmake | 13 + librab/build/tests/cmake_install.cmake | 34 ++ librab/build/tests/test_basic | Bin 0 -> 95816 bytes librab/build/tests/test_basic.c | 207 ++++++++ librab/build/tests/test_hostcheck.c | 71 +++ librab/build/tests/test_merge_capabilities | Bin 0 -> 90696 bytes librab/build/tests/test_merge_capabilities.c | 203 ++++++++ librab/build/tests/test_parse_url.c | 220 +++++++++ librab/build/tests/test_sasl_mechanism | Bin 0 -> 86520 bytes librab/build/tests/test_sasl_mechanism.c | 70 +++ librab/build/tests/test_status_enum.c | 52 ++ librab/build/tests/test_tables.c | 466 ++++++++++++++++++ librab/build/tests/test_tables.expected | 90 ++++ librab/build/tests/tests/test_tables.expected | 90 ++++ .../build/tests/win32/msinttypes/inttypes.h | 304 ++++++++++++ 81 files changed, 3485 insertions(+) create mode 100644 librab/build/tests/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 librab/build/tests/CMakeFiles/progress.marks create mode 100644 librab/build/tests/CMakeFiles/test_basic.dir/C.includecache create mode 100644 librab/build/tests/CMakeFiles/test_basic.dir/DependInfo.cmake create mode 100644 librab/build/tests/CMakeFiles/test_basic.dir/build.make create mode 100644 librab/build/tests/CMakeFiles/test_basic.dir/cmake_clean.cmake create mode 100644 librab/build/tests/CMakeFiles/test_basic.dir/depend.internal create mode 100644 librab/build/tests/CMakeFiles/test_basic.dir/depend.make create mode 100644 librab/build/tests/CMakeFiles/test_basic.dir/flags.make create mode 100644 librab/build/tests/CMakeFiles/test_basic.dir/link.txt create mode 100644 librab/build/tests/CMakeFiles/test_basic.dir/progress.make create mode 100644 librab/build/tests/CMakeFiles/test_hostcheck.dir/C.includecache create mode 100644 librab/build/tests/CMakeFiles/test_hostcheck.dir/DependInfo.cmake create mode 100644 librab/build/tests/CMakeFiles/test_hostcheck.dir/build.make create mode 100644 librab/build/tests/CMakeFiles/test_hostcheck.dir/cmake_clean.cmake create mode 100644 librab/build/tests/CMakeFiles/test_hostcheck.dir/depend.internal create mode 100644 librab/build/tests/CMakeFiles/test_hostcheck.dir/depend.make create mode 100644 librab/build/tests/CMakeFiles/test_hostcheck.dir/flags.make create mode 100644 librab/build/tests/CMakeFiles/test_hostcheck.dir/link.txt create mode 100644 librab/build/tests/CMakeFiles/test_hostcheck.dir/progress.make create mode 100644 librab/build/tests/CMakeFiles/test_merge_capabilities.dir/C.includecache create mode 100644 librab/build/tests/CMakeFiles/test_merge_capabilities.dir/DependInfo.cmake create mode 100644 librab/build/tests/CMakeFiles/test_merge_capabilities.dir/build.make create mode 100644 librab/build/tests/CMakeFiles/test_merge_capabilities.dir/cmake_clean.cmake create mode 100644 librab/build/tests/CMakeFiles/test_merge_capabilities.dir/depend.internal create mode 100644 librab/build/tests/CMakeFiles/test_merge_capabilities.dir/depend.make create mode 100644 librab/build/tests/CMakeFiles/test_merge_capabilities.dir/flags.make create mode 100644 librab/build/tests/CMakeFiles/test_merge_capabilities.dir/link.txt create mode 100644 librab/build/tests/CMakeFiles/test_merge_capabilities.dir/progress.make create mode 100644 librab/build/tests/CMakeFiles/test_parse_url.dir/C.includecache create mode 100644 librab/build/tests/CMakeFiles/test_parse_url.dir/DependInfo.cmake create mode 100644 librab/build/tests/CMakeFiles/test_parse_url.dir/build.make create mode 100644 librab/build/tests/CMakeFiles/test_parse_url.dir/cmake_clean.cmake create mode 100644 librab/build/tests/CMakeFiles/test_parse_url.dir/depend.internal create mode 100644 librab/build/tests/CMakeFiles/test_parse_url.dir/depend.make create mode 100644 librab/build/tests/CMakeFiles/test_parse_url.dir/flags.make create mode 100644 librab/build/tests/CMakeFiles/test_parse_url.dir/link.txt create mode 100644 librab/build/tests/CMakeFiles/test_parse_url.dir/progress.make create mode 100644 librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/C.includecache create mode 100644 librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/DependInfo.cmake create mode 100644 librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/build.make create mode 100644 librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/cmake_clean.cmake create mode 100644 librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/depend.internal create mode 100644 librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/depend.make create mode 100644 librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/flags.make create mode 100644 librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/link.txt create mode 100644 librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/progress.make create mode 100644 librab/build/tests/CMakeFiles/test_status_enum.dir/C.includecache create mode 100644 librab/build/tests/CMakeFiles/test_status_enum.dir/DependInfo.cmake create mode 100644 librab/build/tests/CMakeFiles/test_status_enum.dir/build.make create mode 100644 librab/build/tests/CMakeFiles/test_status_enum.dir/cmake_clean.cmake create mode 100644 librab/build/tests/CMakeFiles/test_status_enum.dir/depend.internal create mode 100644 librab/build/tests/CMakeFiles/test_status_enum.dir/depend.make create mode 100644 librab/build/tests/CMakeFiles/test_status_enum.dir/flags.make create mode 100644 librab/build/tests/CMakeFiles/test_status_enum.dir/link.txt create mode 100644 librab/build/tests/CMakeFiles/test_status_enum.dir/progress.make create mode 100644 librab/build/tests/CMakeFiles/test_tables.dir/C.includecache create mode 100644 librab/build/tests/CMakeFiles/test_tables.dir/DependInfo.cmake create mode 100644 librab/build/tests/CMakeFiles/test_tables.dir/build.make create mode 100644 librab/build/tests/CMakeFiles/test_tables.dir/cmake_clean.cmake create mode 100644 librab/build/tests/CMakeFiles/test_tables.dir/depend.internal create mode 100644 librab/build/tests/CMakeFiles/test_tables.dir/depend.make create mode 100644 librab/build/tests/CMakeFiles/test_tables.dir/flags.make create mode 100644 librab/build/tests/CMakeFiles/test_tables.dir/link.txt create mode 100644 librab/build/tests/CMakeFiles/test_tables.dir/progress.make create mode 100644 librab/build/tests/CMakeLists.txt create mode 100644 librab/build/tests/CTestTestfile.cmake create mode 100644 librab/build/tests/cmake_install.cmake create mode 100644 librab/build/tests/test_basic create mode 100644 librab/build/tests/test_basic.c create mode 100644 librab/build/tests/test_hostcheck.c create mode 100644 librab/build/tests/test_merge_capabilities create mode 100644 librab/build/tests/test_merge_capabilities.c create mode 100644 librab/build/tests/test_parse_url.c create mode 100644 librab/build/tests/test_sasl_mechanism create mode 100644 librab/build/tests/test_sasl_mechanism.c create mode 100644 librab/build/tests/test_status_enum.c create mode 100644 librab/build/tests/test_tables.c create mode 100644 librab/build/tests/test_tables.expected create mode 100644 librab/build/tests/tests/test_tables.expected create mode 100644 librab/build/tests/win32/msinttypes/inttypes.h diff --git a/librab/build/tests/CMakeFiles/CMakeDirectoryInformation.cmake b/librab/build/tests/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..44e562e --- /dev/null +++ b/librab/build/tests/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# Relative path conversion top directories. +SET(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home2/tcs/librab/build") +SET(CMAKE_RELATIVE_PATH_TOP_BINARY "/home2/tcs/librab/build") + +# Force unix paths in dependencies. +SET(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +SET(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +SET(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +SET(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +SET(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/librab/build/tests/CMakeFiles/progress.marks b/librab/build/tests/CMakeFiles/progress.marks new file mode 100644 index 0000000..2bd5a0a --- /dev/null +++ b/librab/build/tests/CMakeFiles/progress.marks @@ -0,0 +1 @@ +22 diff --git a/librab/build/tests/CMakeFiles/test_basic.dir/C.includecache b/librab/build/tests/CMakeFiles/test_basic.dir/C.includecache new file mode 100644 index 0000000..15560c9 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_basic.dir/C.includecache @@ -0,0 +1,54 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home2/tcs/librab/build/tests/test_basic.c +amqp.h +/home2/tcs/librab/build/tests/amqp.h +amqp_tcp_socket.h +/home2/tcs/librab/build/tests/amqp_tcp_socket.h +amqp_time.h +/home2/tcs/librab/build/tests/amqp_time.h +stdio.h +- +stdlib.h +- +string.h +- +WinSock2.h +- +sys/time.h +- +assert.h +- + +librabbitmq/amqp.h +sys/types.h +- +stddef.h +- +stdint.h +- +amqp_framing.h +- + +librabbitmq/amqp_framing.h +amqp.h +- + +librabbitmq/amqp_tcp_socket.h +amqp.h +- + +librabbitmq/amqp_time.h +stdint.h +- +winsock2.h +- +sys/time.h +- + diff --git a/librab/build/tests/CMakeFiles/test_basic.dir/DependInfo.cmake b/librab/build/tests/CMakeFiles/test_basic.dir/DependInfo.cmake new file mode 100644 index 0000000..f8c1e77 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_basic.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +SET(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +SET(CMAKE_DEPENDS_CHECK_C + "/home2/tcs/librab/build/tests/test_basic.c" "/home2/tcs/librab/build/tests/CMakeFiles/test_basic.dir/test_basic.c.o" + ) +SET(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +SET(CMAKE_TARGET_DEFINITIONS + "AMQP_STATIC" + "HAVE_CONFIG_H" + ) + +# Targets to which this target links. +SET(CMAKE_TARGET_LINKED_INFO_FILES + "/home2/tcs/librab/build/librabbitmq/CMakeFiles/rabbitmq-static.dir/DependInfo.cmake" + ) + +# The include file search paths: +SET(CMAKE_C_TARGET_INCLUDE_PATH + "librabbitmq" + "tests/unix" + ) +SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_ASM_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/librab/build/tests/CMakeFiles/test_basic.dir/build.make b/librab/build/tests/CMakeFiles/test_basic.dir/build.make new file mode 100644 index 0000000..62620d5 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_basic.dir/build.make @@ -0,0 +1,108 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The program to use to edit the cache. +CMAKE_EDIT_COMMAND = /usr/bin/ccmake + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home2/tcs/librab/build + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home2/tcs/librab/build + +# Include any dependencies generated for this target. +include tests/CMakeFiles/test_basic.dir/depend.make + +# Include the progress variables for this target. +include tests/CMakeFiles/test_basic.dir/progress.make + +# Include the compile flags for this target's objects. +include tests/CMakeFiles/test_basic.dir/flags.make + +tests/CMakeFiles/test_basic.dir/test_basic.c.o: tests/CMakeFiles/test_basic.dir/flags.make +tests/CMakeFiles/test_basic.dir/test_basic.c.o: tests/test_basic.c + $(CMAKE_COMMAND) -E cmake_progress_report /home2/tcs/librab/build/CMakeFiles $(CMAKE_PROGRESS_1) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building C object tests/CMakeFiles/test_basic.dir/test_basic.c.o" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -o CMakeFiles/test_basic.dir/test_basic.c.o -c /home2/tcs/librab/build/tests/test_basic.c + +tests/CMakeFiles/test_basic.dir/test_basic.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_basic.dir/test_basic.c.i" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -E /home2/tcs/librab/build/tests/test_basic.c > CMakeFiles/test_basic.dir/test_basic.c.i + +tests/CMakeFiles/test_basic.dir/test_basic.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_basic.dir/test_basic.c.s" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -S /home2/tcs/librab/build/tests/test_basic.c -o CMakeFiles/test_basic.dir/test_basic.c.s + +tests/CMakeFiles/test_basic.dir/test_basic.c.o.requires: +.PHONY : tests/CMakeFiles/test_basic.dir/test_basic.c.o.requires + +tests/CMakeFiles/test_basic.dir/test_basic.c.o.provides: tests/CMakeFiles/test_basic.dir/test_basic.c.o.requires + $(MAKE) -f tests/CMakeFiles/test_basic.dir/build.make tests/CMakeFiles/test_basic.dir/test_basic.c.o.provides.build +.PHONY : tests/CMakeFiles/test_basic.dir/test_basic.c.o.provides + +tests/CMakeFiles/test_basic.dir/test_basic.c.o.provides.build: tests/CMakeFiles/test_basic.dir/test_basic.c.o + +# Object files for target test_basic +test_basic_OBJECTS = \ +"CMakeFiles/test_basic.dir/test_basic.c.o" + +# External object files for target test_basic +test_basic_EXTERNAL_OBJECTS = + +tests/test_basic: tests/CMakeFiles/test_basic.dir/test_basic.c.o +tests/test_basic: tests/CMakeFiles/test_basic.dir/build.make +tests/test_basic: librabbitmq/librabbitmq.a +tests/test_basic: /usr/lib64/libssl.so +tests/test_basic: /usr/lib64/libcrypto.so +tests/test_basic: tests/CMakeFiles/test_basic.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking C executable test_basic" + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_basic.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tests/CMakeFiles/test_basic.dir/build: tests/test_basic +.PHONY : tests/CMakeFiles/test_basic.dir/build + +tests/CMakeFiles/test_basic.dir/requires: tests/CMakeFiles/test_basic.dir/test_basic.c.o.requires +.PHONY : tests/CMakeFiles/test_basic.dir/requires + +tests/CMakeFiles/test_basic.dir/clean: + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -P CMakeFiles/test_basic.dir/cmake_clean.cmake +.PHONY : tests/CMakeFiles/test_basic.dir/clean + +tests/CMakeFiles/test_basic.dir/depend: + cd /home2/tcs/librab/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build/tests/CMakeFiles/test_basic.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tests/CMakeFiles/test_basic.dir/depend + diff --git a/librab/build/tests/CMakeFiles/test_basic.dir/cmake_clean.cmake b/librab/build/tests/CMakeFiles/test_basic.dir/cmake_clean.cmake new file mode 100644 index 0000000..a67c28d --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_basic.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +FILE(REMOVE_RECURSE + "CMakeFiles/test_basic.dir/test_basic.c.o" + "test_basic.pdb" + "test_basic" +) + +# Per-language clean rules from dependency scanning. +FOREACH(lang C) + INCLUDE(CMakeFiles/test_basic.dir/cmake_clean_${lang}.cmake OPTIONAL) +ENDFOREACH(lang) diff --git a/librab/build/tests/CMakeFiles/test_basic.dir/depend.internal b/librab/build/tests/CMakeFiles/test_basic.dir/depend.internal new file mode 100644 index 0000000..52f69bc --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_basic.dir/depend.internal @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_basic.dir/test_basic.c.o + /home2/tcs/librab/build/tests/test_basic.c + librabbitmq/amqp.h + librabbitmq/amqp_framing.h + librabbitmq/amqp_tcp_socket.h + librabbitmq/amqp_time.h diff --git a/librab/build/tests/CMakeFiles/test_basic.dir/depend.make b/librab/build/tests/CMakeFiles/test_basic.dir/depend.make new file mode 100644 index 0000000..c536103 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_basic.dir/depend.make @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_basic.dir/test_basic.c.o: tests/test_basic.c +tests/CMakeFiles/test_basic.dir/test_basic.c.o: librabbitmq/amqp.h +tests/CMakeFiles/test_basic.dir/test_basic.c.o: librabbitmq/amqp_framing.h +tests/CMakeFiles/test_basic.dir/test_basic.c.o: librabbitmq/amqp_tcp_socket.h +tests/CMakeFiles/test_basic.dir/test_basic.c.o: librabbitmq/amqp_time.h + diff --git a/librab/build/tests/CMakeFiles/test_basic.dir/flags.make b/librab/build/tests/CMakeFiles/test_basic.dir/flags.make new file mode 100644 index 0000000..f844b0e --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_basic.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# compile C with /bin/cc +C_FLAGS = -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG -I/home2/tcs/librab/build/librabbitmq -I/home2/tcs/librab/build/tests/unix + +C_DEFINES = -DAMQP_STATIC -DHAVE_CONFIG_H + diff --git a/librab/build/tests/CMakeFiles/test_basic.dir/link.txt b/librab/build/tests/CMakeFiles/test_basic.dir/link.txt new file mode 100644 index 0000000..7b89ff6 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_basic.dir/link.txt @@ -0,0 +1 @@ +/bin/cc -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG CMakeFiles/test_basic.dir/test_basic.c.o -o test_basic -rdynamic ../librabbitmq/librabbitmq.a -lssl -lcrypto -lrt -lpthread diff --git a/librab/build/tests/CMakeFiles/test_basic.dir/progress.make b/librab/build/tests/CMakeFiles/test_basic.dir/progress.make new file mode 100644 index 0000000..f06a625 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_basic.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = 62 + diff --git a/librab/build/tests/CMakeFiles/test_hostcheck.dir/C.includecache b/librab/build/tests/CMakeFiles/test_hostcheck.dir/C.includecache new file mode 100644 index 0000000..f776b26 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_hostcheck.dir/C.includecache @@ -0,0 +1,30 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home2/tcs/librab/build/librabbitmq/amqp_hostcheck.c +amqp_hostcheck.h +/home2/tcs/librab/build/librabbitmq/amqp_hostcheck.h +string.h +- + +/home2/tcs/librab/build/librabbitmq/amqp_hostcheck.h + +/home2/tcs/librab/build/tests/test_hostcheck.c +config.h +/home2/tcs/librab/build/tests/config.h +amqp_hostcheck.h +/home2/tcs/librab/build/tests/amqp_hostcheck.h +stdio.h +- +stdlib.h +- + +librabbitmq/amqp_hostcheck.h + +librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_hostcheck.dir/DependInfo.cmake b/librab/build/tests/CMakeFiles/test_hostcheck.dir/DependInfo.cmake new file mode 100644 index 0000000..625205c --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_hostcheck.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +SET(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +SET(CMAKE_DEPENDS_CHECK_C + "/home2/tcs/librab/build/librabbitmq/amqp_hostcheck.c" "/home2/tcs/librab/build/tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o" + "/home2/tcs/librab/build/tests/test_hostcheck.c" "/home2/tcs/librab/build/tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o" + ) +SET(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +SET(CMAKE_TARGET_DEFINITIONS + "AMQP_STATIC" + "HAVE_CONFIG_H" + ) + +# Targets to which this target links. +SET(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# The include file search paths: +SET(CMAKE_C_TARGET_INCLUDE_PATH + "librabbitmq" + "tests/unix" + ) +SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_ASM_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/librab/build/tests/CMakeFiles/test_hostcheck.dir/build.make b/librab/build/tests/CMakeFiles/test_hostcheck.dir/build.make new file mode 100644 index 0000000..c04e43c --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_hostcheck.dir/build.make @@ -0,0 +1,131 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The program to use to edit the cache. +CMAKE_EDIT_COMMAND = /usr/bin/ccmake + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home2/tcs/librab/build + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home2/tcs/librab/build + +# Include any dependencies generated for this target. +include tests/CMakeFiles/test_hostcheck.dir/depend.make + +# Include the progress variables for this target. +include tests/CMakeFiles/test_hostcheck.dir/progress.make + +# Include the compile flags for this target's objects. +include tests/CMakeFiles/test_hostcheck.dir/flags.make + +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o: tests/CMakeFiles/test_hostcheck.dir/flags.make +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o: tests/test_hostcheck.c + $(CMAKE_COMMAND) -E cmake_progress_report /home2/tcs/librab/build/CMakeFiles $(CMAKE_PROGRESS_1) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building C object tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -o CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o -c /home2/tcs/librab/build/tests/test_hostcheck.c + +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_hostcheck.dir/test_hostcheck.c.i" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -E /home2/tcs/librab/build/tests/test_hostcheck.c > CMakeFiles/test_hostcheck.dir/test_hostcheck.c.i + +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_hostcheck.dir/test_hostcheck.c.s" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -S /home2/tcs/librab/build/tests/test_hostcheck.c -o CMakeFiles/test_hostcheck.dir/test_hostcheck.c.s + +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o.requires: +.PHONY : tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o.requires + +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o.provides: tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o.requires + $(MAKE) -f tests/CMakeFiles/test_hostcheck.dir/build.make tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o.provides.build +.PHONY : tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o.provides + +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o.provides.build: tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o + +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o: tests/CMakeFiles/test_hostcheck.dir/flags.make +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o: librabbitmq/amqp_hostcheck.c + $(CMAKE_COMMAND) -E cmake_progress_report /home2/tcs/librab/build/CMakeFiles $(CMAKE_PROGRESS_2) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building C object tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -o CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o -c /home2/tcs/librab/build/librabbitmq/amqp_hostcheck.c + +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.i" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -E /home2/tcs/librab/build/librabbitmq/amqp_hostcheck.c > CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.i + +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.s" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -S /home2/tcs/librab/build/librabbitmq/amqp_hostcheck.c -o CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.s + +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o.requires: +.PHONY : tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o.requires + +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o.provides: tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o.requires + $(MAKE) -f tests/CMakeFiles/test_hostcheck.dir/build.make tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o.provides.build +.PHONY : tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o.provides + +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o.provides.build: tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o + +# Object files for target test_hostcheck +test_hostcheck_OBJECTS = \ +"CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o" \ +"CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o" + +# External object files for target test_hostcheck +test_hostcheck_EXTERNAL_OBJECTS = + +tests/test_hostcheck: tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o +tests/test_hostcheck: tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o +tests/test_hostcheck: tests/CMakeFiles/test_hostcheck.dir/build.make +tests/test_hostcheck: tests/CMakeFiles/test_hostcheck.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking C executable test_hostcheck" + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_hostcheck.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tests/CMakeFiles/test_hostcheck.dir/build: tests/test_hostcheck +.PHONY : tests/CMakeFiles/test_hostcheck.dir/build + +tests/CMakeFiles/test_hostcheck.dir/requires: tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o.requires +tests/CMakeFiles/test_hostcheck.dir/requires: tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o.requires +.PHONY : tests/CMakeFiles/test_hostcheck.dir/requires + +tests/CMakeFiles/test_hostcheck.dir/clean: + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -P CMakeFiles/test_hostcheck.dir/cmake_clean.cmake +.PHONY : tests/CMakeFiles/test_hostcheck.dir/clean + +tests/CMakeFiles/test_hostcheck.dir/depend: + cd /home2/tcs/librab/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build/tests/CMakeFiles/test_hostcheck.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tests/CMakeFiles/test_hostcheck.dir/depend + diff --git a/librab/build/tests/CMakeFiles/test_hostcheck.dir/cmake_clean.cmake b/librab/build/tests/CMakeFiles/test_hostcheck.dir/cmake_clean.cmake new file mode 100644 index 0000000..ed43112 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_hostcheck.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +FILE(REMOVE_RECURSE + "CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o" + "CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o" + "test_hostcheck.pdb" + "test_hostcheck" +) + +# Per-language clean rules from dependency scanning. +FOREACH(lang C) + INCLUDE(CMakeFiles/test_hostcheck.dir/cmake_clean_${lang}.cmake OPTIONAL) +ENDFOREACH(lang) diff --git a/librab/build/tests/CMakeFiles/test_hostcheck.dir/depend.internal b/librab/build/tests/CMakeFiles/test_hostcheck.dir/depend.internal new file mode 100644 index 0000000..79f3293 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_hostcheck.dir/depend.internal @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o + /home2/tcs/librab/build/librabbitmq/amqp_hostcheck.c + /home2/tcs/librab/build/librabbitmq/amqp_hostcheck.h +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o + /home2/tcs/librab/build/tests/test_hostcheck.c + librabbitmq/amqp_hostcheck.h + librabbitmq/config.h diff --git a/librab/build/tests/CMakeFiles/test_hostcheck.dir/depend.make b/librab/build/tests/CMakeFiles/test_hostcheck.dir/depend.make new file mode 100644 index 0000000..b052b93 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_hostcheck.dir/depend.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o: librabbitmq/amqp_hostcheck.c +tests/CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o: librabbitmq/amqp_hostcheck.h + +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o: tests/test_hostcheck.c +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o: librabbitmq/amqp_hostcheck.h +tests/CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o: librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_hostcheck.dir/flags.make b/librab/build/tests/CMakeFiles/test_hostcheck.dir/flags.make new file mode 100644 index 0000000..f844b0e --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_hostcheck.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# compile C with /bin/cc +C_FLAGS = -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG -I/home2/tcs/librab/build/librabbitmq -I/home2/tcs/librab/build/tests/unix + +C_DEFINES = -DAMQP_STATIC -DHAVE_CONFIG_H + diff --git a/librab/build/tests/CMakeFiles/test_hostcheck.dir/link.txt b/librab/build/tests/CMakeFiles/test_hostcheck.dir/link.txt new file mode 100644 index 0000000..e0b4399 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_hostcheck.dir/link.txt @@ -0,0 +1 @@ +/bin/cc -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG CMakeFiles/test_hostcheck.dir/test_hostcheck.c.o CMakeFiles/test_hostcheck.dir/__/librabbitmq/amqp_hostcheck.c.o -o test_hostcheck -rdynamic diff --git a/librab/build/tests/CMakeFiles/test_hostcheck.dir/progress.make b/librab/build/tests/CMakeFiles/test_hostcheck.dir/progress.make new file mode 100644 index 0000000..d17f317 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_hostcheck.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 63 +CMAKE_PROGRESS_2 = 64 + diff --git a/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/C.includecache b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/C.includecache new file mode 100644 index 0000000..12ee967 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/C.includecache @@ -0,0 +1,74 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home2/tcs/librab/build/tests/test_merge_capabilities.c +amqp_socket.h +/home2/tcs/librab/build/tests/amqp_socket.h +amqp_table.h +/home2/tcs/librab/build/tests/amqp_table.h +stdio.h +- +stdlib.h +- + +librabbitmq/amqp.h +sys/types.h +- +stddef.h +- +stdint.h +- +amqp_framing.h +- + +librabbitmq/amqp_framing.h +amqp.h +- + +librabbitmq/amqp_private.h +config.h +librabbitmq/config.h +amqp.h +librabbitmq/amqp.h +amqp_framing.h +librabbitmq/amqp_framing.h +string.h +- +winsock2.h +- +arpa/inet.h +- +sys/uio.h +- +amqp_socket.h +librabbitmq/amqp_socket.h +amqp_time.h +librabbitmq/amqp_time.h + +librabbitmq/amqp_socket.h +amqp_private.h +librabbitmq/amqp_private.h +amqp_time.h +librabbitmq/amqp_time.h + +librabbitmq/amqp_table.h +amqp.h +librabbitmq/amqp.h +amqp_private.h +librabbitmq/amqp_private.h + +librabbitmq/amqp_time.h +stdint.h +- +winsock2.h +- +sys/time.h +- + +librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/DependInfo.cmake b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/DependInfo.cmake new file mode 100644 index 0000000..12c496a --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +SET(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +SET(CMAKE_DEPENDS_CHECK_C + "/home2/tcs/librab/build/tests/test_merge_capabilities.c" "/home2/tcs/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o" + ) +SET(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +SET(CMAKE_TARGET_DEFINITIONS + "AMQP_STATIC" + "HAVE_CONFIG_H" + ) + +# Targets to which this target links. +SET(CMAKE_TARGET_LINKED_INFO_FILES + "/home2/tcs/librab/build/librabbitmq/CMakeFiles/rabbitmq-static.dir/DependInfo.cmake" + ) + +# The include file search paths: +SET(CMAKE_C_TARGET_INCLUDE_PATH + "librabbitmq" + "tests/unix" + ) +SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_ASM_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/build.make b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/build.make new file mode 100644 index 0000000..0e6da51 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/build.make @@ -0,0 +1,108 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The program to use to edit the cache. +CMAKE_EDIT_COMMAND = /usr/bin/ccmake + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home2/tcs/librab/build + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home2/tcs/librab/build + +# Include any dependencies generated for this target. +include tests/CMakeFiles/test_merge_capabilities.dir/depend.make + +# Include the progress variables for this target. +include tests/CMakeFiles/test_merge_capabilities.dir/progress.make + +# Include the compile flags for this target's objects. +include tests/CMakeFiles/test_merge_capabilities.dir/flags.make + +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: tests/CMakeFiles/test_merge_capabilities.dir/flags.make +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: tests/test_merge_capabilities.c + $(CMAKE_COMMAND) -E cmake_progress_report /home2/tcs/librab/build/CMakeFiles $(CMAKE_PROGRESS_1) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building C object tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -o CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o -c /home2/tcs/librab/build/tests/test_merge_capabilities.c + +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.i" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -E /home2/tcs/librab/build/tests/test_merge_capabilities.c > CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.i + +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.s" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -S /home2/tcs/librab/build/tests/test_merge_capabilities.c -o CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.s + +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o.requires: +.PHONY : tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o.requires + +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o.provides: tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o.requires + $(MAKE) -f tests/CMakeFiles/test_merge_capabilities.dir/build.make tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o.provides.build +.PHONY : tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o.provides + +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o.provides.build: tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o + +# Object files for target test_merge_capabilities +test_merge_capabilities_OBJECTS = \ +"CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o" + +# External object files for target test_merge_capabilities +test_merge_capabilities_EXTERNAL_OBJECTS = + +tests/test_merge_capabilities: tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o +tests/test_merge_capabilities: tests/CMakeFiles/test_merge_capabilities.dir/build.make +tests/test_merge_capabilities: librabbitmq/librabbitmq.a +tests/test_merge_capabilities: /usr/lib64/libssl.so +tests/test_merge_capabilities: /usr/lib64/libcrypto.so +tests/test_merge_capabilities: tests/CMakeFiles/test_merge_capabilities.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking C executable test_merge_capabilities" + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_merge_capabilities.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tests/CMakeFiles/test_merge_capabilities.dir/build: tests/test_merge_capabilities +.PHONY : tests/CMakeFiles/test_merge_capabilities.dir/build + +tests/CMakeFiles/test_merge_capabilities.dir/requires: tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o.requires +.PHONY : tests/CMakeFiles/test_merge_capabilities.dir/requires + +tests/CMakeFiles/test_merge_capabilities.dir/clean: + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -P CMakeFiles/test_merge_capabilities.dir/cmake_clean.cmake +.PHONY : tests/CMakeFiles/test_merge_capabilities.dir/clean + +tests/CMakeFiles/test_merge_capabilities.dir/depend: + cd /home2/tcs/librab/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tests/CMakeFiles/test_merge_capabilities.dir/depend + diff --git a/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/cmake_clean.cmake b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/cmake_clean.cmake new file mode 100644 index 0000000..eb25996 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +FILE(REMOVE_RECURSE + "CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o" + "test_merge_capabilities.pdb" + "test_merge_capabilities" +) + +# Per-language clean rules from dependency scanning. +FOREACH(lang C) + INCLUDE(CMakeFiles/test_merge_capabilities.dir/cmake_clean_${lang}.cmake OPTIONAL) +ENDFOREACH(lang) diff --git a/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/depend.internal b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/depend.internal new file mode 100644 index 0000000..230d51e --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/depend.internal @@ -0,0 +1,12 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o + /home2/tcs/librab/build/tests/test_merge_capabilities.c + librabbitmq/amqp.h + librabbitmq/amqp_framing.h + librabbitmq/amqp_private.h + librabbitmq/amqp_socket.h + librabbitmq/amqp_table.h + librabbitmq/amqp_time.h + librabbitmq/config.h diff --git a/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/depend.make b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/depend.make new file mode 100644 index 0000000..ac955a0 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/depend.make @@ -0,0 +1,12 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: tests/test_merge_capabilities.c +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: librabbitmq/amqp.h +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: librabbitmq/amqp_framing.h +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: librabbitmq/amqp_private.h +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: librabbitmq/amqp_socket.h +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: librabbitmq/amqp_table.h +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: librabbitmq/amqp_time.h +tests/CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o: librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/flags.make b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/flags.make new file mode 100644 index 0000000..f844b0e --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# compile C with /bin/cc +C_FLAGS = -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG -I/home2/tcs/librab/build/librabbitmq -I/home2/tcs/librab/build/tests/unix + +C_DEFINES = -DAMQP_STATIC -DHAVE_CONFIG_H + diff --git a/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/link.txt b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/link.txt new file mode 100644 index 0000000..c44a119 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/link.txt @@ -0,0 +1 @@ +/bin/cc -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG CMakeFiles/test_merge_capabilities.dir/test_merge_capabilities.c.o -o test_merge_capabilities -rdynamic ../librabbitmq/librabbitmq.a -lssl -lcrypto -lrt -lpthread diff --git a/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/progress.make b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/progress.make new file mode 100644 index 0000000..143c9b1 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_merge_capabilities.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = 65 + diff --git a/librab/build/tests/CMakeFiles/test_parse_url.dir/C.includecache b/librab/build/tests/CMakeFiles/test_parse_url.dir/C.includecache new file mode 100644 index 0000000..e11e6f5 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_parse_url.dir/C.includecache @@ -0,0 +1,38 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home2/tcs/librab/build/tests/test_parse_url.c +config.h +/home2/tcs/librab/build/tests/config.h +stdio.h +- +stdlib.h +- +string.h +- +inttypes.h +- +amqp.h +- + +librabbitmq/amqp.h +sys/types.h +- +stddef.h +- +stdint.h +- +amqp_framing.h +- + +librabbitmq/amqp_framing.h +amqp.h +- + +librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_parse_url.dir/DependInfo.cmake b/librab/build/tests/CMakeFiles/test_parse_url.dir/DependInfo.cmake new file mode 100644 index 0000000..9fb72f5 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_parse_url.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +SET(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +SET(CMAKE_DEPENDS_CHECK_C + "/home2/tcs/librab/build/tests/test_parse_url.c" "/home2/tcs/librab/build/tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o" + ) +SET(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +SET(CMAKE_TARGET_DEFINITIONS + "AMQP_STATIC" + "HAVE_CONFIG_H" + ) + +# Targets to which this target links. +SET(CMAKE_TARGET_LINKED_INFO_FILES + "/home2/tcs/librab/build/librabbitmq/CMakeFiles/rabbitmq-static.dir/DependInfo.cmake" + ) + +# The include file search paths: +SET(CMAKE_C_TARGET_INCLUDE_PATH + "librabbitmq" + "tests/unix" + ) +SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_ASM_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/librab/build/tests/CMakeFiles/test_parse_url.dir/build.make b/librab/build/tests/CMakeFiles/test_parse_url.dir/build.make new file mode 100644 index 0000000..df5afb6 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_parse_url.dir/build.make @@ -0,0 +1,108 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The program to use to edit the cache. +CMAKE_EDIT_COMMAND = /usr/bin/ccmake + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home2/tcs/librab/build + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home2/tcs/librab/build + +# Include any dependencies generated for this target. +include tests/CMakeFiles/test_parse_url.dir/depend.make + +# Include the progress variables for this target. +include tests/CMakeFiles/test_parse_url.dir/progress.make + +# Include the compile flags for this target's objects. +include tests/CMakeFiles/test_parse_url.dir/flags.make + +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o: tests/CMakeFiles/test_parse_url.dir/flags.make +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o: tests/test_parse_url.c + $(CMAKE_COMMAND) -E cmake_progress_report /home2/tcs/librab/build/CMakeFiles $(CMAKE_PROGRESS_1) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building C object tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -o CMakeFiles/test_parse_url.dir/test_parse_url.c.o -c /home2/tcs/librab/build/tests/test_parse_url.c + +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_parse_url.dir/test_parse_url.c.i" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -E /home2/tcs/librab/build/tests/test_parse_url.c > CMakeFiles/test_parse_url.dir/test_parse_url.c.i + +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_parse_url.dir/test_parse_url.c.s" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -S /home2/tcs/librab/build/tests/test_parse_url.c -o CMakeFiles/test_parse_url.dir/test_parse_url.c.s + +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o.requires: +.PHONY : tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o.requires + +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o.provides: tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o.requires + $(MAKE) -f tests/CMakeFiles/test_parse_url.dir/build.make tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o.provides.build +.PHONY : tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o.provides + +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o.provides.build: tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o + +# Object files for target test_parse_url +test_parse_url_OBJECTS = \ +"CMakeFiles/test_parse_url.dir/test_parse_url.c.o" + +# External object files for target test_parse_url +test_parse_url_EXTERNAL_OBJECTS = + +tests/test_parse_url: tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o +tests/test_parse_url: tests/CMakeFiles/test_parse_url.dir/build.make +tests/test_parse_url: librabbitmq/librabbitmq.a +tests/test_parse_url: /usr/lib64/libssl.so +tests/test_parse_url: /usr/lib64/libcrypto.so +tests/test_parse_url: tests/CMakeFiles/test_parse_url.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking C executable test_parse_url" + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_parse_url.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tests/CMakeFiles/test_parse_url.dir/build: tests/test_parse_url +.PHONY : tests/CMakeFiles/test_parse_url.dir/build + +tests/CMakeFiles/test_parse_url.dir/requires: tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o.requires +.PHONY : tests/CMakeFiles/test_parse_url.dir/requires + +tests/CMakeFiles/test_parse_url.dir/clean: + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -P CMakeFiles/test_parse_url.dir/cmake_clean.cmake +.PHONY : tests/CMakeFiles/test_parse_url.dir/clean + +tests/CMakeFiles/test_parse_url.dir/depend: + cd /home2/tcs/librab/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build/tests/CMakeFiles/test_parse_url.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tests/CMakeFiles/test_parse_url.dir/depend + diff --git a/librab/build/tests/CMakeFiles/test_parse_url.dir/cmake_clean.cmake b/librab/build/tests/CMakeFiles/test_parse_url.dir/cmake_clean.cmake new file mode 100644 index 0000000..1415e58 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_parse_url.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +FILE(REMOVE_RECURSE + "CMakeFiles/test_parse_url.dir/test_parse_url.c.o" + "test_parse_url.pdb" + "test_parse_url" +) + +# Per-language clean rules from dependency scanning. +FOREACH(lang C) + INCLUDE(CMakeFiles/test_parse_url.dir/cmake_clean_${lang}.cmake OPTIONAL) +ENDFOREACH(lang) diff --git a/librab/build/tests/CMakeFiles/test_parse_url.dir/depend.internal b/librab/build/tests/CMakeFiles/test_parse_url.dir/depend.internal new file mode 100644 index 0000000..7858a03 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_parse_url.dir/depend.internal @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o + /home2/tcs/librab/build/tests/test_parse_url.c + librabbitmq/amqp.h + librabbitmq/amqp_framing.h + librabbitmq/config.h diff --git a/librab/build/tests/CMakeFiles/test_parse_url.dir/depend.make b/librab/build/tests/CMakeFiles/test_parse_url.dir/depend.make new file mode 100644 index 0000000..cccf58f --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_parse_url.dir/depend.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o: tests/test_parse_url.c +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o: librabbitmq/amqp.h +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o: librabbitmq/amqp_framing.h +tests/CMakeFiles/test_parse_url.dir/test_parse_url.c.o: librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_parse_url.dir/flags.make b/librab/build/tests/CMakeFiles/test_parse_url.dir/flags.make new file mode 100644 index 0000000..f844b0e --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_parse_url.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# compile C with /bin/cc +C_FLAGS = -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG -I/home2/tcs/librab/build/librabbitmq -I/home2/tcs/librab/build/tests/unix + +C_DEFINES = -DAMQP_STATIC -DHAVE_CONFIG_H + diff --git a/librab/build/tests/CMakeFiles/test_parse_url.dir/link.txt b/librab/build/tests/CMakeFiles/test_parse_url.dir/link.txt new file mode 100644 index 0000000..e6e726f --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_parse_url.dir/link.txt @@ -0,0 +1 @@ +/bin/cc -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG CMakeFiles/test_parse_url.dir/test_parse_url.c.o -o test_parse_url -rdynamic ../librabbitmq/librabbitmq.a -lssl -lcrypto -lrt -lpthread diff --git a/librab/build/tests/CMakeFiles/test_parse_url.dir/progress.make b/librab/build/tests/CMakeFiles/test_parse_url.dir/progress.make new file mode 100644 index 0000000..8e705a1 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_parse_url.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = 66 + diff --git a/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/C.includecache b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/C.includecache new file mode 100644 index 0000000..b1613dd --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/C.includecache @@ -0,0 +1,68 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home2/tcs/librab/build/tests/test_sasl_mechanism.c +stdio.h +- +stdlib.h +- +string.h +- +amqp_socket.h +- + +librabbitmq/amqp.h +sys/types.h +- +stddef.h +- +stdint.h +- +amqp_framing.h +- + +librabbitmq/amqp_framing.h +amqp.h +- + +librabbitmq/amqp_private.h +config.h +librabbitmq/config.h +amqp.h +librabbitmq/amqp.h +amqp_framing.h +librabbitmq/amqp_framing.h +string.h +- +winsock2.h +- +arpa/inet.h +- +sys/uio.h +- +amqp_socket.h +librabbitmq/amqp_socket.h +amqp_time.h +librabbitmq/amqp_time.h + +librabbitmq/amqp_socket.h +amqp_private.h +librabbitmq/amqp_private.h +amqp_time.h +librabbitmq/amqp_time.h + +librabbitmq/amqp_time.h +stdint.h +- +winsock2.h +- +sys/time.h +- + +librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/DependInfo.cmake b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/DependInfo.cmake new file mode 100644 index 0000000..b2f656c --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +SET(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +SET(CMAKE_DEPENDS_CHECK_C + "/home2/tcs/librab/build/tests/test_sasl_mechanism.c" "/home2/tcs/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o" + ) +SET(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +SET(CMAKE_TARGET_DEFINITIONS + "AMQP_STATIC" + "HAVE_CONFIG_H" + ) + +# Targets to which this target links. +SET(CMAKE_TARGET_LINKED_INFO_FILES + "/home2/tcs/librab/build/librabbitmq/CMakeFiles/rabbitmq-static.dir/DependInfo.cmake" + ) + +# The include file search paths: +SET(CMAKE_C_TARGET_INCLUDE_PATH + "librabbitmq" + "tests/unix" + ) +SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_ASM_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/build.make b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/build.make new file mode 100644 index 0000000..7671675 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/build.make @@ -0,0 +1,108 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The program to use to edit the cache. +CMAKE_EDIT_COMMAND = /usr/bin/ccmake + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home2/tcs/librab/build + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home2/tcs/librab/build + +# Include any dependencies generated for this target. +include tests/CMakeFiles/test_sasl_mechanism.dir/depend.make + +# Include the progress variables for this target. +include tests/CMakeFiles/test_sasl_mechanism.dir/progress.make + +# Include the compile flags for this target's objects. +include tests/CMakeFiles/test_sasl_mechanism.dir/flags.make + +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o: tests/CMakeFiles/test_sasl_mechanism.dir/flags.make +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o: tests/test_sasl_mechanism.c + $(CMAKE_COMMAND) -E cmake_progress_report /home2/tcs/librab/build/CMakeFiles $(CMAKE_PROGRESS_1) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building C object tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -o CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o -c /home2/tcs/librab/build/tests/test_sasl_mechanism.c + +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.i" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -E /home2/tcs/librab/build/tests/test_sasl_mechanism.c > CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.i + +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.s" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -S /home2/tcs/librab/build/tests/test_sasl_mechanism.c -o CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.s + +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o.requires: +.PHONY : tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o.requires + +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o.provides: tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o.requires + $(MAKE) -f tests/CMakeFiles/test_sasl_mechanism.dir/build.make tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o.provides.build +.PHONY : tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o.provides + +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o.provides.build: tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o + +# Object files for target test_sasl_mechanism +test_sasl_mechanism_OBJECTS = \ +"CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o" + +# External object files for target test_sasl_mechanism +test_sasl_mechanism_EXTERNAL_OBJECTS = + +tests/test_sasl_mechanism: tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o +tests/test_sasl_mechanism: tests/CMakeFiles/test_sasl_mechanism.dir/build.make +tests/test_sasl_mechanism: librabbitmq/librabbitmq.a +tests/test_sasl_mechanism: /usr/lib64/libssl.so +tests/test_sasl_mechanism: /usr/lib64/libcrypto.so +tests/test_sasl_mechanism: tests/CMakeFiles/test_sasl_mechanism.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking C executable test_sasl_mechanism" + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_sasl_mechanism.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tests/CMakeFiles/test_sasl_mechanism.dir/build: tests/test_sasl_mechanism +.PHONY : tests/CMakeFiles/test_sasl_mechanism.dir/build + +tests/CMakeFiles/test_sasl_mechanism.dir/requires: tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o.requires +.PHONY : tests/CMakeFiles/test_sasl_mechanism.dir/requires + +tests/CMakeFiles/test_sasl_mechanism.dir/clean: + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -P CMakeFiles/test_sasl_mechanism.dir/cmake_clean.cmake +.PHONY : tests/CMakeFiles/test_sasl_mechanism.dir/clean + +tests/CMakeFiles/test_sasl_mechanism.dir/depend: + cd /home2/tcs/librab/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tests/CMakeFiles/test_sasl_mechanism.dir/depend + diff --git a/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/cmake_clean.cmake b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/cmake_clean.cmake new file mode 100644 index 0000000..519f538 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +FILE(REMOVE_RECURSE + "CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o" + "test_sasl_mechanism.pdb" + "test_sasl_mechanism" +) + +# Per-language clean rules from dependency scanning. +FOREACH(lang C) + INCLUDE(CMakeFiles/test_sasl_mechanism.dir/cmake_clean_${lang}.cmake OPTIONAL) +ENDFOREACH(lang) diff --git a/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/depend.internal b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/depend.internal new file mode 100644 index 0000000..022fa75 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/depend.internal @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o + /home2/tcs/librab/build/tests/test_sasl_mechanism.c + librabbitmq/amqp.h + librabbitmq/amqp_framing.h + librabbitmq/amqp_private.h + librabbitmq/amqp_socket.h + librabbitmq/amqp_time.h + librabbitmq/config.h diff --git a/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/depend.make b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/depend.make new file mode 100644 index 0000000..37cd875 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/depend.make @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o: tests/test_sasl_mechanism.c +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o: librabbitmq/amqp.h +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o: librabbitmq/amqp_framing.h +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o: librabbitmq/amqp_private.h +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o: librabbitmq/amqp_socket.h +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o: librabbitmq/amqp_time.h +tests/CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o: librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/flags.make b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/flags.make new file mode 100644 index 0000000..f844b0e --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# compile C with /bin/cc +C_FLAGS = -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG -I/home2/tcs/librab/build/librabbitmq -I/home2/tcs/librab/build/tests/unix + +C_DEFINES = -DAMQP_STATIC -DHAVE_CONFIG_H + diff --git a/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/link.txt b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/link.txt new file mode 100644 index 0000000..679d4b9 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/link.txt @@ -0,0 +1 @@ +/bin/cc -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG CMakeFiles/test_sasl_mechanism.dir/test_sasl_mechanism.c.o -o test_sasl_mechanism -rdynamic ../librabbitmq/librabbitmq.a -lssl -lcrypto -lrt -lpthread diff --git a/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/progress.make b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/progress.make new file mode 100644 index 0000000..059bbec --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_sasl_mechanism.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = 67 + diff --git a/librab/build/tests/CMakeFiles/test_status_enum.dir/C.includecache b/librab/build/tests/CMakeFiles/test_status_enum.dir/C.includecache new file mode 100644 index 0000000..8b34b3e --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_status_enum.dir/C.includecache @@ -0,0 +1,36 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home2/tcs/librab/build/tests/test_status_enum.c +config.h +/home2/tcs/librab/build/tests/config.h +amqp.h +/home2/tcs/librab/build/tests/amqp.h +stdio.h +- +stdlib.h +- +string.h +- + +librabbitmq/amqp.h +sys/types.h +- +stddef.h +- +stdint.h +- +amqp_framing.h +- + +librabbitmq/amqp_framing.h +amqp.h +- + +librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_status_enum.dir/DependInfo.cmake b/librab/build/tests/CMakeFiles/test_status_enum.dir/DependInfo.cmake new file mode 100644 index 0000000..1fc0b98 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_status_enum.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +SET(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +SET(CMAKE_DEPENDS_CHECK_C + "/home2/tcs/librab/build/tests/test_status_enum.c" "/home2/tcs/librab/build/tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o" + ) +SET(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +SET(CMAKE_TARGET_DEFINITIONS + "AMQP_STATIC" + "HAVE_CONFIG_H" + ) + +# Targets to which this target links. +SET(CMAKE_TARGET_LINKED_INFO_FILES + "/home2/tcs/librab/build/librabbitmq/CMakeFiles/rabbitmq-static.dir/DependInfo.cmake" + ) + +# The include file search paths: +SET(CMAKE_C_TARGET_INCLUDE_PATH + "librabbitmq" + "tests/unix" + ) +SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_ASM_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/librab/build/tests/CMakeFiles/test_status_enum.dir/build.make b/librab/build/tests/CMakeFiles/test_status_enum.dir/build.make new file mode 100644 index 0000000..b484e88 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_status_enum.dir/build.make @@ -0,0 +1,108 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The program to use to edit the cache. +CMAKE_EDIT_COMMAND = /usr/bin/ccmake + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home2/tcs/librab/build + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home2/tcs/librab/build + +# Include any dependencies generated for this target. +include tests/CMakeFiles/test_status_enum.dir/depend.make + +# Include the progress variables for this target. +include tests/CMakeFiles/test_status_enum.dir/progress.make + +# Include the compile flags for this target's objects. +include tests/CMakeFiles/test_status_enum.dir/flags.make + +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o: tests/CMakeFiles/test_status_enum.dir/flags.make +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o: tests/test_status_enum.c + $(CMAKE_COMMAND) -E cmake_progress_report /home2/tcs/librab/build/CMakeFiles $(CMAKE_PROGRESS_1) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building C object tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -o CMakeFiles/test_status_enum.dir/test_status_enum.c.o -c /home2/tcs/librab/build/tests/test_status_enum.c + +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_status_enum.dir/test_status_enum.c.i" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -E /home2/tcs/librab/build/tests/test_status_enum.c > CMakeFiles/test_status_enum.dir/test_status_enum.c.i + +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_status_enum.dir/test_status_enum.c.s" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -S /home2/tcs/librab/build/tests/test_status_enum.c -o CMakeFiles/test_status_enum.dir/test_status_enum.c.s + +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o.requires: +.PHONY : tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o.requires + +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o.provides: tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o.requires + $(MAKE) -f tests/CMakeFiles/test_status_enum.dir/build.make tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o.provides.build +.PHONY : tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o.provides + +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o.provides.build: tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o + +# Object files for target test_status_enum +test_status_enum_OBJECTS = \ +"CMakeFiles/test_status_enum.dir/test_status_enum.c.o" + +# External object files for target test_status_enum +test_status_enum_EXTERNAL_OBJECTS = + +tests/test_status_enum: tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o +tests/test_status_enum: tests/CMakeFiles/test_status_enum.dir/build.make +tests/test_status_enum: librabbitmq/librabbitmq.a +tests/test_status_enum: /usr/lib64/libssl.so +tests/test_status_enum: /usr/lib64/libcrypto.so +tests/test_status_enum: tests/CMakeFiles/test_status_enum.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking C executable test_status_enum" + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_status_enum.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tests/CMakeFiles/test_status_enum.dir/build: tests/test_status_enum +.PHONY : tests/CMakeFiles/test_status_enum.dir/build + +tests/CMakeFiles/test_status_enum.dir/requires: tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o.requires +.PHONY : tests/CMakeFiles/test_status_enum.dir/requires + +tests/CMakeFiles/test_status_enum.dir/clean: + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -P CMakeFiles/test_status_enum.dir/cmake_clean.cmake +.PHONY : tests/CMakeFiles/test_status_enum.dir/clean + +tests/CMakeFiles/test_status_enum.dir/depend: + cd /home2/tcs/librab/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build/tests/CMakeFiles/test_status_enum.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tests/CMakeFiles/test_status_enum.dir/depend + diff --git a/librab/build/tests/CMakeFiles/test_status_enum.dir/cmake_clean.cmake b/librab/build/tests/CMakeFiles/test_status_enum.dir/cmake_clean.cmake new file mode 100644 index 0000000..123191b --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_status_enum.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +FILE(REMOVE_RECURSE + "CMakeFiles/test_status_enum.dir/test_status_enum.c.o" + "test_status_enum.pdb" + "test_status_enum" +) + +# Per-language clean rules from dependency scanning. +FOREACH(lang C) + INCLUDE(CMakeFiles/test_status_enum.dir/cmake_clean_${lang}.cmake OPTIONAL) +ENDFOREACH(lang) diff --git a/librab/build/tests/CMakeFiles/test_status_enum.dir/depend.internal b/librab/build/tests/CMakeFiles/test_status_enum.dir/depend.internal new file mode 100644 index 0000000..e720ce3 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_status_enum.dir/depend.internal @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o + /home2/tcs/librab/build/tests/test_status_enum.c + librabbitmq/amqp.h + librabbitmq/amqp_framing.h + librabbitmq/config.h diff --git a/librab/build/tests/CMakeFiles/test_status_enum.dir/depend.make b/librab/build/tests/CMakeFiles/test_status_enum.dir/depend.make new file mode 100644 index 0000000..8751f28 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_status_enum.dir/depend.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o: tests/test_status_enum.c +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o: librabbitmq/amqp.h +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o: librabbitmq/amqp_framing.h +tests/CMakeFiles/test_status_enum.dir/test_status_enum.c.o: librabbitmq/config.h + diff --git a/librab/build/tests/CMakeFiles/test_status_enum.dir/flags.make b/librab/build/tests/CMakeFiles/test_status_enum.dir/flags.make new file mode 100644 index 0000000..f844b0e --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_status_enum.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# compile C with /bin/cc +C_FLAGS = -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG -I/home2/tcs/librab/build/librabbitmq -I/home2/tcs/librab/build/tests/unix + +C_DEFINES = -DAMQP_STATIC -DHAVE_CONFIG_H + diff --git a/librab/build/tests/CMakeFiles/test_status_enum.dir/link.txt b/librab/build/tests/CMakeFiles/test_status_enum.dir/link.txt new file mode 100644 index 0000000..f67d25c --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_status_enum.dir/link.txt @@ -0,0 +1 @@ +/bin/cc -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG CMakeFiles/test_status_enum.dir/test_status_enum.c.o -o test_status_enum -rdynamic ../librabbitmq/librabbitmq.a -lssl -lcrypto -lrt -lpthread diff --git a/librab/build/tests/CMakeFiles/test_status_enum.dir/progress.make b/librab/build/tests/CMakeFiles/test_status_enum.dir/progress.make new file mode 100644 index 0000000..a9dc8c8 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_status_enum.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = 68 + diff --git a/librab/build/tests/CMakeFiles/test_tables.dir/C.includecache b/librab/build/tests/CMakeFiles/test_tables.dir/C.includecache new file mode 100644 index 0000000..b511ee4 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_tables.dir/C.includecache @@ -0,0 +1,40 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home2/tcs/librab/build/tests/test_tables.c +errno.h +- +stdarg.h +- +stdio.h +- +stdlib.h +- +string.h +- +inttypes.h +- +amqp.h +- +math.h +- + +librabbitmq/amqp.h +sys/types.h +- +stddef.h +- +stdint.h +- +amqp_framing.h +- + +librabbitmq/amqp_framing.h +amqp.h +- + diff --git a/librab/build/tests/CMakeFiles/test_tables.dir/DependInfo.cmake b/librab/build/tests/CMakeFiles/test_tables.dir/DependInfo.cmake new file mode 100644 index 0000000..45a2966 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_tables.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +SET(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +SET(CMAKE_DEPENDS_CHECK_C + "/home2/tcs/librab/build/tests/test_tables.c" "/home2/tcs/librab/build/tests/CMakeFiles/test_tables.dir/test_tables.c.o" + ) +SET(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +SET(CMAKE_TARGET_DEFINITIONS + "AMQP_STATIC" + "HAVE_CONFIG_H" + ) + +# Targets to which this target links. +SET(CMAKE_TARGET_LINKED_INFO_FILES + "/home2/tcs/librab/build/librabbitmq/CMakeFiles/rabbitmq-static.dir/DependInfo.cmake" + ) + +# The include file search paths: +SET(CMAKE_C_TARGET_INCLUDE_PATH + "librabbitmq" + "tests/unix" + ) +SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_ASM_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/librab/build/tests/CMakeFiles/test_tables.dir/build.make b/librab/build/tests/CMakeFiles/test_tables.dir/build.make new file mode 100644 index 0000000..abbef0a --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_tables.dir/build.make @@ -0,0 +1,108 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The program to use to edit the cache. +CMAKE_EDIT_COMMAND = /usr/bin/ccmake + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home2/tcs/librab/build + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home2/tcs/librab/build + +# Include any dependencies generated for this target. +include tests/CMakeFiles/test_tables.dir/depend.make + +# Include the progress variables for this target. +include tests/CMakeFiles/test_tables.dir/progress.make + +# Include the compile flags for this target's objects. +include tests/CMakeFiles/test_tables.dir/flags.make + +tests/CMakeFiles/test_tables.dir/test_tables.c.o: tests/CMakeFiles/test_tables.dir/flags.make +tests/CMakeFiles/test_tables.dir/test_tables.c.o: tests/test_tables.c + $(CMAKE_COMMAND) -E cmake_progress_report /home2/tcs/librab/build/CMakeFiles $(CMAKE_PROGRESS_1) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building C object tests/CMakeFiles/test_tables.dir/test_tables.c.o" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -o CMakeFiles/test_tables.dir/test_tables.c.o -c /home2/tcs/librab/build/tests/test_tables.c + +tests/CMakeFiles/test_tables.dir/test_tables.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_tables.dir/test_tables.c.i" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -E /home2/tcs/librab/build/tests/test_tables.c > CMakeFiles/test_tables.dir/test_tables.c.i + +tests/CMakeFiles/test_tables.dir/test_tables.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_tables.dir/test_tables.c.s" + cd /home2/tcs/librab/build/tests && /bin/cc $(C_DEFINES) $(C_FLAGS) -S /home2/tcs/librab/build/tests/test_tables.c -o CMakeFiles/test_tables.dir/test_tables.c.s + +tests/CMakeFiles/test_tables.dir/test_tables.c.o.requires: +.PHONY : tests/CMakeFiles/test_tables.dir/test_tables.c.o.requires + +tests/CMakeFiles/test_tables.dir/test_tables.c.o.provides: tests/CMakeFiles/test_tables.dir/test_tables.c.o.requires + $(MAKE) -f tests/CMakeFiles/test_tables.dir/build.make tests/CMakeFiles/test_tables.dir/test_tables.c.o.provides.build +.PHONY : tests/CMakeFiles/test_tables.dir/test_tables.c.o.provides + +tests/CMakeFiles/test_tables.dir/test_tables.c.o.provides.build: tests/CMakeFiles/test_tables.dir/test_tables.c.o + +# Object files for target test_tables +test_tables_OBJECTS = \ +"CMakeFiles/test_tables.dir/test_tables.c.o" + +# External object files for target test_tables +test_tables_EXTERNAL_OBJECTS = + +tests/test_tables: tests/CMakeFiles/test_tables.dir/test_tables.c.o +tests/test_tables: tests/CMakeFiles/test_tables.dir/build.make +tests/test_tables: librabbitmq/librabbitmq.a +tests/test_tables: /usr/lib64/libssl.so +tests/test_tables: /usr/lib64/libcrypto.so +tests/test_tables: tests/CMakeFiles/test_tables.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking C executable test_tables" + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_tables.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +tests/CMakeFiles/test_tables.dir/build: tests/test_tables +.PHONY : tests/CMakeFiles/test_tables.dir/build + +tests/CMakeFiles/test_tables.dir/requires: tests/CMakeFiles/test_tables.dir/test_tables.c.o.requires +.PHONY : tests/CMakeFiles/test_tables.dir/requires + +tests/CMakeFiles/test_tables.dir/clean: + cd /home2/tcs/librab/build/tests && $(CMAKE_COMMAND) -P CMakeFiles/test_tables.dir/cmake_clean.cmake +.PHONY : tests/CMakeFiles/test_tables.dir/clean + +tests/CMakeFiles/test_tables.dir/depend: + cd /home2/tcs/librab/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build /home2/tcs/librab/build/tests /home2/tcs/librab/build/tests/CMakeFiles/test_tables.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : tests/CMakeFiles/test_tables.dir/depend + diff --git a/librab/build/tests/CMakeFiles/test_tables.dir/cmake_clean.cmake b/librab/build/tests/CMakeFiles/test_tables.dir/cmake_clean.cmake new file mode 100644 index 0000000..79ba21c --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_tables.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +FILE(REMOVE_RECURSE + "CMakeFiles/test_tables.dir/test_tables.c.o" + "test_tables.pdb" + "test_tables" +) + +# Per-language clean rules from dependency scanning. +FOREACH(lang C) + INCLUDE(CMakeFiles/test_tables.dir/cmake_clean_${lang}.cmake OPTIONAL) +ENDFOREACH(lang) diff --git a/librab/build/tests/CMakeFiles/test_tables.dir/depend.internal b/librab/build/tests/CMakeFiles/test_tables.dir/depend.internal new file mode 100644 index 0000000..5ff2d47 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_tables.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_tables.dir/test_tables.c.o + /home2/tcs/librab/build/tests/test_tables.c + librabbitmq/amqp.h + librabbitmq/amqp_framing.h diff --git a/librab/build/tests/CMakeFiles/test_tables.dir/depend.make b/librab/build/tests/CMakeFiles/test_tables.dir/depend.make new file mode 100644 index 0000000..db43c66 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_tables.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +tests/CMakeFiles/test_tables.dir/test_tables.c.o: tests/test_tables.c +tests/CMakeFiles/test_tables.dir/test_tables.c.o: librabbitmq/amqp.h +tests/CMakeFiles/test_tables.dir/test_tables.c.o: librabbitmq/amqp_framing.h + diff --git a/librab/build/tests/CMakeFiles/test_tables.dir/flags.make b/librab/build/tests/CMakeFiles/test_tables.dir/flags.make new file mode 100644 index 0000000..f844b0e --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_tables.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# compile C with /bin/cc +C_FLAGS = -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG -I/home2/tcs/librab/build/librabbitmq -I/home2/tcs/librab/build/tests/unix + +C_DEFINES = -DAMQP_STATIC -DHAVE_CONFIG_H + diff --git a/librab/build/tests/CMakeFiles/test_tables.dir/link.txt b/librab/build/tests/CMakeFiles/test_tables.dir/link.txt new file mode 100644 index 0000000..f89e420 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_tables.dir/link.txt @@ -0,0 +1 @@ +/bin/cc -Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden -std=gnu90 -O3 -DNDEBUG CMakeFiles/test_tables.dir/test_tables.c.o -o test_tables -rdynamic ../librabbitmq/librabbitmq.a -lssl -lcrypto -lrt -lpthread diff --git a/librab/build/tests/CMakeFiles/test_tables.dir/progress.make b/librab/build/tests/CMakeFiles/test_tables.dir/progress.make new file mode 100644 index 0000000..ddffd49 --- /dev/null +++ b/librab/build/tests/CMakeFiles/test_tables.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = 69 + diff --git a/librab/build/tests/CMakeLists.txt b/librab/build/tests/CMakeLists.txt new file mode 100644 index 0000000..cf042b0 --- /dev/null +++ b/librab/build/tests/CMakeLists.txt @@ -0,0 +1,47 @@ +include_directories(${LIBRABBITMQ_INCLUDE_DIRS}) + +if (MSVC) + # No version of MSVC has inttypes.h, this uses the msinttypes + # Note this includes stdint.h which is either in + # ../librabbitmq/win32/msinttypes or in a standard location + include_directories(win32/msinttypes) +endif (MSVC) + +add_definitions(-DHAVE_CONFIG_H) +add_definitions(-DAMQP_STATIC) + +add_executable(test_parse_url test_parse_url.c) +target_link_libraries(test_parse_url rabbitmq-static) +add_test(parse_url test_parse_url) + +add_executable(test_tables test_tables.c) +target_link_libraries(test_tables rabbitmq-static) +add_test(tables test_tables) +configure_file(test_tables.expected ${CMAKE_CURRENT_BINARY_DIR}/tests/test_tables.expected COPYONLY) + +add_executable(test_hostcheck + test_hostcheck.c + ../librabbitmq/amqp_hostcheck.c) +add_test(hostcheck test_hostcheck) + +add_executable(test_status_enum + test_status_enum.c) +target_link_libraries(test_status_enum rabbitmq-static) +add_test(status_enum test_status_enum) + +add_executable(test_basic + test_basic.c) +target_link_libraries(test_basic rabbitmq-static) + +if (NOT APPLE) + add_test(basic test_basic) +endif() + +add_executable(test_sasl_mechanism test_sasl_mechanism.c) +target_link_libraries(test_sasl_mechanism rabbitmq-static) +add_test(sasl_mechanism test_sasl_mechanism) + +add_executable(test_merge_capabilities test_merge_capabilities.c) +target_link_libraries(test_merge_capabilities rabbitmq-static) +add_test(merge_capabilities test_merge_capabilities) + diff --git a/librab/build/tests/CTestTestfile.cmake b/librab/build/tests/CTestTestfile.cmake new file mode 100644 index 0000000..25a763a --- /dev/null +++ b/librab/build/tests/CTestTestfile.cmake @@ -0,0 +1,13 @@ +# CMake generated Testfile for +# Source directory: /home2/tcs/librab/build/tests +# Build directory: /home2/tcs/librab/build/tests +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +ADD_TEST(parse_url "test_parse_url") +ADD_TEST(tables "test_tables") +ADD_TEST(hostcheck "test_hostcheck") +ADD_TEST(status_enum "test_status_enum") +ADD_TEST(basic "test_basic") +ADD_TEST(sasl_mechanism "test_sasl_mechanism") +ADD_TEST(merge_capabilities "test_merge_capabilities") diff --git a/librab/build/tests/cmake_install.cmake b/librab/build/tests/cmake_install.cmake new file mode 100644 index 0000000..db3a3b2 --- /dev/null +++ b/librab/build/tests/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home2/tcs/librab/build/tests + +# Set the install prefix +IF(NOT DEFINED CMAKE_INSTALL_PREFIX) + SET(CMAKE_INSTALL_PREFIX "/usr") +ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX) +STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + IF(BUILD_TYPE) + STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + ELSE(BUILD_TYPE) + SET(CMAKE_INSTALL_CONFIG_NAME "Release") + ENDIF(BUILD_TYPE) + MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + +# Set the component getting installed. +IF(NOT CMAKE_INSTALL_COMPONENT) + IF(COMPONENT) + MESSAGE(STATUS "Install component: \"${COMPONENT}\"") + SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + ELSE(COMPONENT) + SET(CMAKE_INSTALL_COMPONENT) + ENDIF(COMPONENT) +ENDIF(NOT CMAKE_INSTALL_COMPONENT) + +# Install shared libraries without execute permission? +IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + SET(CMAKE_INSTALL_SO_NO_EXE "0") +ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + diff --git a/librab/build/tests/test_basic b/librab/build/tests/test_basic new file mode 100644 index 0000000000000000000000000000000000000000..189e49c6bfd099f6a02fb27193a962e425710a53 GIT binary patch literal 95816 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

sQ%SA?NYtj9uYB}njE!nRw~I+3vYhHp2$(o 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ℑ={0Pyl&8cXO^K-Ca z$^))Q@LG%ZFEgF0z3GH5HJwG~O&?Rr3*#v-Op)@!zhTOY;wdjmk@BJxDSte=UK~$% zF{Qg1|7pRvD}wX=pjP;Cnz1x8P{pm^~Q(E>R&ZcHCBHEXle$sNDhadO;(K4Nm# zwx*LiUR&eDxY>Nf#L_pg59hzp7^z93L88~}PSxGwYjssCmb;r80&g5W;G%mT>*cnl_K((w7!Af#Pipzf<$)n zHbD)ZdThH9|H+`z-`w5CBgbAy>k5R!&FccpL*0lKv-0ym*}pCjiN}Z|#tprJ-hjU? z(AwD?3K$BPxbd{)cfyf0d`fTT^C5ydHO%r_PG3s42VJdJm4eh7}%ngB7guRr~9GfA6tko@$X? z=c%o{+F!rAwA52yuQ*C;svA7j4gQ9j8h@p`u0kSK*ZAvdRyQQ>z*oPz%2OxN+$;i< ziSpI;9+6&M)8H?!S)E9%zGih@smEVgQ@Tp?)Yf?*sm#~ltEu*vyM2{90BE(RRKYcf zB{F^0SGp^GW&T=sgEy&2b#*nOocgP)8{Cb4PXZ~esj6~Um-!{K6x8cR3YAvA)zzNH zS|sWz^K&gIMof@YzAX}|Xzt3&nyYla2=GyMph9fX;x=~0YPA2P)NDbvh@M6&TZPA8<|&0uCl}iiSm|j<6Sl$!^RX%` z9*aZLrMJ3zT14c1b?S^HhuB1_z%54LdG!`Y*LKzK@TXUXRZ)nn=ko|ZlunT^Ae z&$y@3&M%P>&Zi~Z*1lCb@$hL)S%qs8RF>vO?^~)fI=0Hi8Tn=P$3y>D-e0H3S3c(Y z__*rzqssZPcA)uw*sk<;u=C@g|10mW)8mnkxjsIwdi|(!KCB&RK0N_21EEk)sK{tG z>+37kjoH)M+8YW5+6;m)HEavFH(wtx*EV-_0&F(b+}Y0D+SA+FW_I^P%;rv-R!0J6 zSD>pWw9)A3#!MWm_vGWvw&qB)A+ryKU`iVfn;mV*sCu?TFip?9o4W#LXHU=dy+NIi zj_%f;u3&Sdqop&T1g#H*=<$t_$Vsp{6qdl%b(Qgq0ERrQ7#WdfiXG|cF)^=Rhcfnr z%$DA@YZ27j9q0>U;*1qy$xA5E8t7OL6@&tqB!?p=trfJHJ-rblyb%jfT?~Yvvarsi zMMyBz6X|K~>BLF~bR!E8W=GiMDSMj+nma>*=C+MyPcXm}cH`syl^AXonC(#1DYQ!P z7NL!T+f(ls{6^usL+Dq9{!r-iLVqK4x5UfBCXDpc>6|6^3xuu|8W6fc=s}791-XAv z=wm{sB)k9{5z~)NR~rrtqhoCcOcK_iYlgWLUoe2R!`473Vy0&lo9Abop^aE+?1*&0 zsBg5(M74z!M%LL0BWp9my{)ZS0$SVK*||}Yg^lV}8L59WVJgJc9%v3lS^~|=$Y5gg z>9K_@_H})$DA^f~HA;ix@{E-VT;|q#= zZkPvghO>B~v)Fk-5X)RC~Vfal&V9g(gZE@(AsE8V_o z!_%miTc8i6#CkV;sq!P2P-&ZcBkh6ih!~}xd~0tg;AdZ81p4rtse4@jkEG?IrK7tI zRTDNWDZ!z%^|nTg%8u^dJ|o!K9D(=hf@Mj`;qC}vYcyJ$gUu}+ov_+K*a&p{SF6P` z!=ODy@Z0fS7t^utC_3@5q9eBZM&Z-pn)ccFG;WWt@#E1#Nyi?4Dor}allNi6$87TR zZRI^?3)gZ#?($DaI&rya($#vJ_@1h-LZLce1-AR$wtLMNmHO8An%d)Q{CKoq(y_-s zmL{F!$@{S3_VU--%G++c*K$AZ^1CD*Emz;`^fc9ay5mt*e|<(}mBsrd?R zd>XgM*ZA>hfuv)P?@W`<@#KBjaC`Ze+REEyyVr6*?(*-Da%#EyUZUq;ouZA2z(tmS21NQ?_s|Hyv(|ulbKh z^QHWaLdVnSP3y_ISJl(_xS~#>t|yc4P20WZ>$AnvxHk>1!_(2I#IwimPm_K+IUg0b zm*1X#x^kw&?eRZses)Ru3xw)>dwi{@{Qat)^7kovSnf+~_f58Y&DZ#Jay*S^r@?i2 zIyx%p*yHa^lYTlm9~HNk-=2QDa;C%W@jrBaL~nbf9uB9`qt?@|gG&Ds2NZ33M$r7#_jPnemvSP>Dc2prAg;_ z@;+?%s7-#Yt-Ry5doB0lF8_$+L(A3oIz3Ibo(}$0)r%oihfn<^xxPki;hJxcjZfqD z_!>VR?U!`y@yFAob3Az;Hr!tRT3dPBZTDL4$6fw>Nk_}o_c}dIwVsxr8@!AbJ&Qmg1R3SIwdsYOvkd>Cm6;*BWmyyu~-wX zgE`pP4)iwAQP2lK_kfOrwx5WNS3sS(KRhcIn;?qM$BuzIb7L`chG9&AHiA0yVzGYE z(R{=QZ8`;fp#7)DVug_7It}5VO{d3VyFkZ4$LRj7SnMF^2Q&65xgS^_!(+6X!h+7CJbx{L5O!~-1#odO*L&CUfMs0rE>Ks->R1L=U~gB}8% z04>Nv{;q>wK&L==fI7R7UOwW1Hh~5~aVm+?4>|%m0=gS?6m%SP3iJ?Yup8-~jQBl> z4>}PTpia;+&_>V+&_2+^pd*Cio2UuUDbOgW6FXZPr=lFa&^Ku92ILRa zyb+4|EK41aus9H|PZDIOr7UAy8uz^ag5fMmnc~ z|7P%kI&TFI+5}oK2XaAOpyQxTpoc#XdjXvSJq(&Z0DA%L--7a=j(A&3|*vEj$BqhL8^EDCh|2$nA&^Iu2@l65(G!eSrpdp&f$O z-i`D@o%cZhXCnN|z(L3HC296t-2W@`0Xp?fqyrlKHtx?tIYGxj4?hOIeF}1Z5Q_yt z$3b_2n)o1b9CQRU|I^41Xd&of&{|O1Uor^V1Udpb1v&vb@&x!z@PU?q8b1O*s0%bm z_v6SPXg}x_=m==`*^m!vf|`5551RiZ{1s>u=s0K)^blx2=oIJ}X#P2n_Y~?M)ciN- z6?Eb`@PoR30=b_-IDS;k^vk%h&dBJ?&p30|iP<9=C*~6ll^8#m5sRHq4Dw6OZy56s zPW;(f$U_D$a`Ve`3s&akY{>36F8}1R^B2#f9C3POpodS0#ZWbPaVHloMB&$fzM2A$ z0Ds+vQ+l`KU-pTy*gK#kXCSjIw>ES8%-sC4+-x^F9+j_$K@WqkngHgj$#q@}Hg}xO zSc0He@Gm<%7W)$Mt;o&anYkjjVA$c#H3zb)a>p_=Z=IQIx^oKL2mbUY6tN zLrXOXN;n-9bPV`c(dX(P;ah-@oED3nqe0MX@b5n0yMf;f-(=B~C)d24^t9~+cdm0_ zMp>@QQJpz6*Xd?;p^8;~dUG6YS%Axv;RDRedLaF0QM}4n z>_QOKuNjp3oeR7W_}PMABlr^FF5ovRyeYFcH=E>C0^bdMnZljxg})8>1n_pv->UdG zk^HLZ_#MFefww9C+DyOVe+c-Y6#P#EcUH$@7fHG|NV=~8Zv^gAxa%gt-v-_fyh-6r znQN5%S+L84z(1>SbFJ{tqp>3J9?gH9;$IHDq$U#Y-bJ8)Cv zBU$F(0z8-kzYlm{3jAT<{lL!^IZYzxS>U^XcM>i?s+ZS+PXXVmK~Tcq2i}e`=|hB9 zQi*@FG1fJ(Pvn~fpfP=c{HC;v71S=!45VFDz|A>&VYMZt)0&2tER5`v_Q@Ho zLm!N5l6QM1eA+hUhbwZMZd6`adC7{L%tnjTWIz4@;^)`LVqc^9?C%hNz@eg&cZJ_y zm6Lge_I$)f<$DG3b|9X$9_9gmoALwvK4N5fJ|!=hxmC-c_;WFaFTmcj*7$@k0qz8T z9>qs{X%_ug0`~%^A;10+e;aTY@GCV4O86$=J5uo90i5={wepkSe+c+N;4M@y$oD{I zW_V_9c3Dp5b0Dj7O7T~^NmYLEXJZb5p-ucZ7guis&j-%_oaNLZriUE@>1Q?y;6yl= zkM+a-OGU1E6?bM(H_KlRz7p_R%S-j$An|`dsV4eG?sqq%e=6nv5H;<>4dkP9REbmC z_;&~5k3lZ78UGRf5b)h8@TY-~+VCade+Bq1;CGP}D{(3lz?H}>P{;Bg>j?O1#&rp`WS*ZF)IwhEM(Ue91NPl+# zcLIN$z;yWz+5Gt`u0C$RFCae6<-YX+@iCgQ4K6YRHmH;&lD*8s+%SJlEEXVn=>Idx zTvq0wmqVQpgzzSWFF}7w`L+5B?nl{QxTznlz<}IxGJ-D=2Nhd{TS>#i!s%6Xs16RXX8x;yK^$vq{7Q{ zGSNFdwg1`Yeu4@dn6d4I+p~rpJ2Tl%H_d{7!rH+IN9UCN78TU&6I) zVxx9j37pd3M*z3m3i3Bz8i%pJfl+4OZ);`Zuu1Oih<^z2ODMkl2!8;$(Hx6iM%XpE z`3=YorT0VNg}}Fq{)VZazMbYDGVUX-U1Lj6O+$<_#D5?0`&wc#I=7zkEAu0^10G+) z&kf8#H=DU``mj{;U5Th=aA34n^Xvz%f)^h z{ZD*6JCd>5R<1G_HGZV87byNZ%$W&*zgh)-5&m1?CBQN4iT?=CqO~C4*7_uTF7QI& z)E(#_;Y)y1u6L3faj;cHv!KEjwPV@kL28uf}iyKknqnXy(H|Htg2b{ zr0AJft4Z1Xt& zsRAu+7;2b43NFp*O^M4ql3RKjntpMs_`@3XcqboFHrQ&?^pDN$rK zPcMT3Pe9)D1f-LPWt_x-gD1!^ny5O>J^?yOTWUhIj*{(%xsv@ajD;g7d3@q6>ZvK;)`So^&@ znSW&xKYKORKXih>5ByD14jGTKzb;klKBF1eS@ncM$hd9^(s+pScLUZiDLvLR`$cQ~ zrcRp*$&Ow}yfMTpqIl>N+MrspgZF_S1U^7G}()&W$tKZ=0RTPmV~ze5!V-MXTKOJA z(9_^EZ;8eJgC`nLLD{?ARD#x3%Dkbhq%kOxd)I5Fstp;kO&&V9K zXFMzTCUwNN{Ca79f$dJ_3nLkhS*gbhEN~N*AM(bAVzHI+`C7sbrp-T^X!epq0iGPJ zAg8nr$3s-0=^Y%mOtQl=JoD(^8H@cqIelJ7Ow1RhJTU$rrp$mhXASV_dQ%?i4y5xC z(mD1Iu~;Z>?>0NMw%6Ls6)BVP4t%2)N4MV{AAB%^i1cA*o6|;%5U=e z4E&Ostk8M^<-Zer$G~@figskHr?T9UjLww#_vK_how5L)91L|+R3Hj4FDp$9)y}f8 zE<17`)>Y#9=k<=2n5$Ol^&l$eeDECtU-NXnN-JLj_{{rbu`A+yJWheU&6-Wkf56uW zzUzq(?I5+kq*aonZmm2Aopjtwq7S3!aD~RRkk+B^8GsSAaFhJ8K6l)c4)sesPXxXbJ~2y;#Z$V{654lrS!S~ zuBLGxQoAm$chb|_;2Q-W9tj#owR&E~<;Szc-N0E-h_x1_E6-8-DFf?#gdarsqZE(j zvz?&TWp0d*4=_%OU#}qNS%Bp(Xi)OG1W_Z9HJa{xtA@;MV!eeBiGD?*kqoX09(xp{`JmvC!$cafLCF8laG0o&_Zw1plkV5B*!8 zXQ7bSTSt|pIr`}t1oJRuRjvs$S9faN=o-jtAH|lbB#+bg<(iw-Je%^p3E{gCZl6cp z0el2Fxe5IPWITjFJAji-D|y!{R8SAFI>h4>73;f2nN7A-al>+o5&7avzMe!=34iirPsKL=V{Nv3NWo5RS&yBw)-hY?AM zXT{rrRhR>hYF@dp<(>i&Voe#C#zXB4jan}8Gl8^2dL$)(>$ z{3HH{ZTvfd6aOI_|JMXJZRw5+eyQNvuTKd66Op6+|D@n!g6n7WnNS3!J1TfS_~=LP zdJ*0)xbBCR08gd2%b9uAd6O>pO~{*AT(~hTs!FQaG=z0so8O#sP)% zS`_d(j@0t$%qz-|et$m;y!0y-T)*Fcv4V}O1=sKS^I8PLf`aSs0(cDq_*TL7cLTSI zoO=Y<-xcthKEl2Qob*PAE7H%&e+^?F@KpNwSsFZDyZbfEKgDn^Q}RW;@fPFL+arai zO7~CTC%rX2?_v?n{1@|FD3I{}Un*RW-{uQG@x^5PGFJHX{^bhcH}6&a{45D+_yx~D zr0@;E=oiuQ?{@J$KNG{%kl-VduC~MbG{5Bk3XX*}dyRia$yqG;UcpBtT`lJY;8b7j zZzz6YH-4?JhO-RZ!Ie`=nKIp5*G>Rm&^$HNMLNbt*r-+8CPb^lT& zxG|t`ekTiYS_K~wJBNGW-v%w`7cRbkRl&w>f(P$c`168)N#jy4dYto3E$0Qrf4%Vk zSa3u7!OH}H8F+?KVA#i#zXyH_>Frh}=Uc)*3l4$si5nEI_5Ufxg~>wb-9+LaeIS{? zMsQ=J!mpG#*J*rI;r}4`t!d=nl?JDG6e->Omz5k|YlN&PfahbJJj*s7-j_zsFGS9G zNXhAx{QOq%pe_FyuzxPE@GM8#<5mg#G~*UVxm=tE_llf+ zv2#=t|C-Y9hlGD*tBd*IcKCOT;K2)Be1DFDjsKHI&ezl6kBgj%ppw%ha(*iK_%jOU zXLksr?*>T^P3sjtCj9>+xNEz@`5i-qIZ$!B&lOfCpGt!-VjTU{KPx#+87dZiwm|9D zO1m%>Y+Nn))IEw{>$6*M^C^Y%Gg`#SJ(=W8pQraTzX-LET_UId86{_-gndKspe;X7 zq>=NpH251LXI$(VZjgWP2|m^5;(IiI{>{e1Ch1{9+Ns9p2|gnH+MX{Gd|dqYDv?tu z_}EumjJz&*o8V2-E-n=OO(>Sqbx1!Yu(4kFM{V|bo8ZpZT+GVPN^td0f{%#a&J{u5 z6+9?%bh&;a_=M!=M&W;5@X;^381V}Jj>c{JoQVZs%76cu;y)z(rwKmwlEU?Rf|GG! zvXJNUNY3%srm$O5`Wbr{6m5V7byNx z!N111+*ru>h2OYW@t-DP&k26GN8#;)|0<0f`rbBG`~8I2!?@Vnc_QZw#^uIB77PF3 z+gyz5`Ylbve^na1D-FIw zUGVQk!AH7XeBZ8MBMO}Qcl$cnJHV;lr)>2;gY5_7^UX>Qe`^3)yW!aLkx$b$PN46X z+3!iZ%Ou?kG%kMoBEc^cyh-$+%UdtFxk{zW-@YNvb%Kw}c;IZ2vr+KFI}|^^tBtTP zFfL3M^3T92|MqdtH$+ap$p4zec}mOwFBc;L!Jij=RQfgk1`uIy2p*JrfqMD(p5~YF zMzP>C(a=b5P2wjP3;s#L`?t9m`HtY{3m%kq(I)t%f*Zmg7QBXWxv>y>=ateO6F=sW zu(05!^!twszC-id{MEgJJ3}t!G==}`g1bb1q2P}R-Y>YW_ZJx#CJXtU@Edoy7{#!M ze_7l=qMv=k#rK&CHf9Sx@_B{p`np8$eyJBdZ>nWnB3nogaMNK>KC|rMY`i#cEsBm50R|RkSw!&Y54Ep_9@DXWWE=F-$ zE1V(zpY}V4am+iUAJP8#BEf?Z7sq*1{E|=b5$TubiNtFKKP-0p1Dz6|Wu%WD{h(8k zim^3rq}XZr{Wt)q0Y_bwudY^y{rHQQI4`;|`LHF$y)X^;#Y>V8YEs;b(r}lgOZ38v zEk`l=Y47Va5|*Zsu+W(%hYJ^8oLbbvMI}aSC=!lf^J|>d>i4fKt@GpDkp{otXbb2Q z*8Gt!+M*Ua<$|NF$G@(#r=_{m-xlc!h5gOgg*LwFaq&fqFT5}{lYcFCPxd#5Ld_ff z*a8Be$uo3Yd|}CjPF0f5o^?2J))JHVC)XKS+Y#t&^Yi}A zsuolv917Oc7Jydcp$ZRRgY;B*Vn-P*IDzo#V^rX^*rJ$@*tGb*)mRZKBoLy&-Ip z>}N%axhV!Z=MDR~H+QOJWRD$HNWULXjr|_4q~R^Ale~mB;~>FI&}a&zcv?&waG9df9_K*wlu;T}J2$loan zhbpj3bgOl5=S1P+`Lbppsk$itU15JO_MsLn(BX4vF0I%~I|9K-3+KZ5gUFl85QR@i zsj~GZMHb_w!s;`ctuPRD-J)PQgRHL^z1Dqi(TC&t5js@@so6+q3s8Wkt6YEze z{IN4h=(?*18$$JTceJw0!CvWIK`Dbp<=s6kozSTYzyW_!?33 zHj|fJ!`c%D%e86sb*ci$hB~@%4nhZ=YLLJp>#cSb?2X_Y@Yd^dq4A#D5ZhuV01beF55(zl}2zo>Xo@r6nhf#I&eME}0Dp|60Vc6*&$13pF^$e?g-_Rpfs~ytXPIAJ0#(RofT6Jcid&gm-$y|s@ zCyXY8oSw~~{5{vBA$7N<;M7Nua5U-asolea;Ba~9nOawJytS>}kI1kH=iN1S3m6{UU)S zwbb}=8A=v4-ZU+hf|UI!R%J_}z;!t4MIqW41KsNboiIFwT1Iwiz$K;Db&xP-u>pT~ zZ&wS3gsj(;JqSR!zb^RL&UoUSy+8;u{C2C49|oaMfmJn@=www=Btd7YtGQ2sJg`)k zmJyxqD=^rj2GJf$q1{BeRdm(1dGxLTDq5tuJEG<(oG0IkD|LTzdkj*)*L zkRnm?el&iPqj*@TY7g8R)}lLUO^$|AH@CIH<*w~X4zOgXn@o#R{2)&5Xo$(^O3_Hx zuTACF(f-i2Aq(VuQzYLV*kCzw7cL5;{#3e_7G!OBs^e2xkqWS$34%t>x>CJ6msM4e zYK07_0VC82t=U9aM}tbg!Cs6g6&D%Ov>rt!8+O}NHBS2FBokgpdI1_NB`XH!KZh|m z<53C6kp_+&LES4??Op}|$ zxKpS2r4-~ss_%4VvuamoV z-Mz&vy&aux7vQY3V!FeCq1`BM+t>|xibg^zL=P{RP4_bhgVi-t1i1=!MvP*zPNNu? z#Wan4`;I};LU=})hxmSnnchkXqM(C>9Jh(EGSsBewW;Oa#D)A1WJUAR+w z?h!TVkL8zTxu(m7_-BnD$#en1`&}YXuRk(~Klb=#z>eY@0GOcxOP{(*^c(4puF zip0N@kXxe~7kH!@&wtYl7Y8-T1MQNN_|~9XD!X34E>N&>B`75kPybXGhwM6)iJ`x% zP|H zB%SK``n~nWPbm(kFzWPmd|m!65`Ts8>F+#tNPPWW2*sy3_V_!2Q4vMm@%P{x&jyI! zCl!hRrMy~ygSfHA*YC^sOMKod)Di)Y7x<^?9k{c`*YDK_$*}R$`Bit*@9#%|HNJlT zzF*@1{7D^CQJtewZ-G>_v#LP$oRiTTuMo&ufIz;e4O}*!aq_o*{+VSzh8(-{CrU?@z77_ zTid}dVAk~YcMiwsg?S4<-&pRooVS2k1I8mtQ~6o+a^hIdukfy87M$fh5zZ0iinn1vXr#Z>8FHt*kCd|KJ%4C3m +#include +#include + +#ifdef _WIN32 +#include +#else +#include +#endif + +#ifdef NDEBUG +#undef NDEBUG +#endif +#include + +static const int fixed_channel_id = 1; +static const char test_queue_name[] = "test_queue"; + +amqp_connection_state_t setup_connection_and_channel(void) { + amqp_connection_state_t connection_state_ = amqp_new_connection(); + + amqp_socket_t *socket = amqp_tcp_socket_new(connection_state_); + assert(socket); + + int rc = amqp_socket_open(socket, "localhost", AMQP_PROTOCOL_PORT); + assert(rc == AMQP_STATUS_OK); + + amqp_rpc_reply_t rpc_reply = amqp_login( + connection_state_, "/", 1, AMQP_DEFAULT_FRAME_SIZE, + AMQP_DEFAULT_HEARTBEAT, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); + assert(rpc_reply.reply_type == AMQP_RESPONSE_NORMAL); + + amqp_channel_open_ok_t *res = + amqp_channel_open(connection_state_, fixed_channel_id); + assert(res != NULL); + + return connection_state_; +} + +void close_and_destroy_connection(amqp_connection_state_t connection_state_) { + amqp_rpc_reply_t rpc_reply = + amqp_connection_close(connection_state_, AMQP_REPLY_SUCCESS); + assert(rpc_reply.reply_type == AMQP_RESPONSE_NORMAL); + + int rc = amqp_destroy_connection(connection_state_); + assert(rc == AMQP_STATUS_OK); +} + +void basic_publish(amqp_connection_state_t connectionState_, + const char *message_) { + amqp_bytes_t message_bytes = amqp_cstring_bytes(message_); + + amqp_basic_properties_t properties; + properties._flags = 0; + + properties._flags |= AMQP_BASIC_DELIVERY_MODE_FLAG; + properties.delivery_mode = AMQP_DELIVERY_NONPERSISTENT; + + int retval = amqp_basic_publish( + connectionState_, fixed_channel_id, amqp_cstring_bytes(""), + amqp_cstring_bytes(test_queue_name), + /* mandatory=*/1, + /* immediate=*/0, /* RabbitMQ 3.x does not support the "immediate" flag + according to + https://www.rabbitmq.com/specification.html */ + &properties, message_bytes); + + assert(retval == 0); +} + +void queue_declare(amqp_connection_state_t connection_state_, + const char *queue_name_) { + amqp_queue_declare_ok_t *res = amqp_queue_declare( + connection_state_, fixed_channel_id, amqp_cstring_bytes(queue_name_), + /*passive*/ 0, + /*durable*/ 0, + /*exclusive*/ 0, + /*auto_delete*/ 1, amqp_empty_table); + assert(res != NULL); +} + +char *basic_get(amqp_connection_state_t connection_state_, + const char *queue_name_, uint64_t *out_body_size_) { + amqp_rpc_reply_t rpc_reply; + amqp_time_t deadline; + struct timeval timeout = {5, 0}; + int time_rc = amqp_time_from_now(&deadline, &timeout); + assert(time_rc == AMQP_STATUS_OK); + + do { + rpc_reply = amqp_basic_get(connection_state_, fixed_channel_id, + amqp_cstring_bytes(queue_name_), /*no_ack*/ 1); + } while (rpc_reply.reply_type == AMQP_RESPONSE_NORMAL && + rpc_reply.reply.id == AMQP_BASIC_GET_EMPTY_METHOD && + amqp_time_has_past(deadline) == AMQP_STATUS_OK); + + assert(rpc_reply.reply_type == AMQP_RESPONSE_NORMAL); + assert(rpc_reply.reply.id == AMQP_BASIC_GET_OK_METHOD); + + amqp_message_t message; + rpc_reply = + amqp_read_message(connection_state_, fixed_channel_id, &message, 0); + assert(rpc_reply.reply_type == AMQP_RESPONSE_NORMAL); + + char *body = malloc(message.body.len); + memcpy(body, message.body.bytes, message.body.len); + *out_body_size_ = message.body.len; + amqp_destroy_message(&message); + + return body; +} + +void publish_and_basic_get_message(const char *msg_to_publish) { + amqp_connection_state_t connection_state = setup_connection_and_channel(); + + queue_declare(connection_state, test_queue_name); + basic_publish(connection_state, msg_to_publish); + + uint64_t body_size; + char *msg = basic_get(connection_state, test_queue_name, &body_size); + + assert(body_size == strlen(msg_to_publish)); + assert(strncmp(msg_to_publish, msg, body_size) == 0); + free(msg); + + close_and_destroy_connection(connection_state); +} + +char *consume_message(amqp_connection_state_t connection_state_, + const char *queue_name_, uint64_t *out_body_size_) { + amqp_basic_consume_ok_t *result = + amqp_basic_consume(connection_state_, fixed_channel_id, + amqp_cstring_bytes(queue_name_), amqp_empty_bytes, + /*no_local*/ 0, + /*no_ack*/ 1, + /*exclusive*/ 0, amqp_empty_table); + assert(result != NULL); + + amqp_envelope_t envelope; + struct timeval timeout = {5, 0}; + amqp_rpc_reply_t rpc_reply = + amqp_consume_message(connection_state_, &envelope, &timeout, 0); + assert(rpc_reply.reply_type == AMQP_RESPONSE_NORMAL); + + *out_body_size_ = envelope.message.body.len; + char *body = malloc(*out_body_size_); + if (*out_body_size_) { + memcpy(body, envelope.message.body.bytes, *out_body_size_); + } + + amqp_destroy_envelope(&envelope); + return body; +} + +void publish_and_consume_message(const char *msg_to_publish) { + amqp_connection_state_t connection_state = setup_connection_and_channel(); + + queue_declare(connection_state, test_queue_name); + basic_publish(connection_state, msg_to_publish); + + uint64_t body_size; + char *msg = consume_message(connection_state, test_queue_name, &body_size); + + assert(body_size == strlen(msg_to_publish)); + assert(strncmp(msg_to_publish, msg, body_size) == 0); + free(msg); + + close_and_destroy_connection(connection_state); +} + +int main(void) { + publish_and_basic_get_message(""); + publish_and_basic_get_message("TEST"); + + publish_and_consume_message(""); + publish_and_consume_message("TEST"); + + return 0; +} diff --git a/librab/build/tests/test_hostcheck.c b/librab/build/tests/test_hostcheck.c new file mode 100644 index 0000000..24c0d6c --- /dev/null +++ b/librab/build/tests/test_hostcheck.c @@ -0,0 +1,71 @@ +/* + * Copyright 2014 Michael Steinert + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "amqp_hostcheck.h" + +#include +#include + +static void hostcheck_success(const char *match_pattern, const char *url) { + int ok; + + ok = amqp_hostcheck(match_pattern, url); + if (!ok) { + fprintf(stderr, "Expected hostname check to pass, but didn't: %s (%s)\n", + url, match_pattern); + abort(); + } + + fprintf(stdout, "ok: [success] %s, %s\n", url, match_pattern); +} + +static void hostcheck_fail(const char *match_pattern, const char *url) { + int ok; + + ok = amqp_hostcheck(match_pattern, url); + if (ok) { + fprintf(stderr, "Expected hostname check to fail, but didn't: %s (%s)\n", + url, match_pattern); + abort(); + } + + fprintf(stdout, "ok: [fail] %s, %s\n", url, match_pattern); +} + +int main(void) { + hostcheck_success("www.rabbitmq.com", "www.rabbitmq.com"); + hostcheck_success("www.rabbitmq.com", "wWw.RaBbItMq.CoM"); + hostcheck_success("*.rabbitmq.com", "wWw.RaBbItMq.CoM"); + hostcheck_fail("rabbitmq.com", "www.rabbitmq.com"); + hostcheck_success("*.rabbitmq.com", "www.rabbitmq.com"); + hostcheck_fail("*.com", "www.rabbitmq.com"); + hostcheck_fail("*.rabbitmq.com", "long.url.rabbitmq.com"); + hostcheck_success("*.url.rabbitmq.com", "long.url.rabbitmq.com"); + + return 0; +} diff --git a/librab/build/tests/test_merge_capabilities b/librab/build/tests/test_merge_capabilities new file mode 100644 index 0000000000000000000000000000000000000000..bf89be43f3d5c034b3f4d07f6828dfef4a3bb015 GIT binary patch literal 90696 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 +#include + +static int compare_bytes(amqp_bytes_t l, amqp_bytes_t r); +static int compare_amqp_table_entry(amqp_table_entry_t result, + amqp_table_entry_t expect); +static int compare_field_value(amqp_field_value_t result, + amqp_field_value_t expect); +static int compare_amqp_table(amqp_table_t* result, amqp_table_t* expect); + +static int compare_bytes(amqp_bytes_t l, amqp_bytes_t r) { + if (l.len == r.len && + (l.bytes == r.bytes || 0 == memcmp(l.bytes, r.bytes, l.len))) { + return 1; + } + return 0; +} + +static int compare_amqp_table_entry(amqp_table_entry_t result, + amqp_table_entry_t expect) { + if (!compare_bytes(result.key, expect.key)) { + return 0; + } + return compare_field_value(result.value, expect.value); +} + +static int compare_field_value(amqp_field_value_t result, + amqp_field_value_t expect) { + if (result.kind != expect.kind) { + return 0; + } + switch (result.kind) { + case AMQP_FIELD_KIND_BOOLEAN: + return result.value.boolean == expect.value.boolean; + case AMQP_FIELD_KIND_I8: + return result.value.i8 == expect.value.i8; + case AMQP_FIELD_KIND_U8: + return result.value.u8 == expect.value.u8; + case AMQP_FIELD_KIND_I16: + return result.value.i16 == expect.value.i16; + case AMQP_FIELD_KIND_U16: + return result.value.u16 == expect.value.u16; + case AMQP_FIELD_KIND_I32: + return result.value.i32 == expect.value.i32; + case AMQP_FIELD_KIND_U32: + return result.value.u32 == expect.value.u32; + case AMQP_FIELD_KIND_I64: + return result.value.i64 == expect.value.i64; + case AMQP_FIELD_KIND_U64: + case AMQP_FIELD_KIND_TIMESTAMP: + return result.value.u64 == expect.value.u64; + case AMQP_FIELD_KIND_F32: + return result.value.f32 == expect.value.f32; + case AMQP_FIELD_KIND_F64: + return result.value.f64 == expect.value.f64; + case AMQP_FIELD_KIND_DECIMAL: + return !memcmp(&result.value.decimal, &expect.value.decimal, + sizeof(expect.value.decimal)); + case AMQP_FIELD_KIND_UTF8: + case AMQP_FIELD_KIND_BYTES: + return compare_bytes(result.value.bytes, expect.value.bytes); + case AMQP_FIELD_KIND_ARRAY: { + int i; + if (result.value.array.num_entries != expect.value.array.num_entries) { + return 0; + } + for (i = 0; i < result.value.array.num_entries; ++i) { + if (!compare_field_value(result.value.array.entries[i], + expect.value.array.entries[i])) { + return 0; + } + } + return 1; + } + case AMQP_FIELD_KIND_TABLE: + return compare_amqp_table(&result.value.table, &expect.value.table); + case AMQP_FIELD_KIND_VOID: + return 1; + } + return 1; +} + +static int compare_amqp_table(amqp_table_t* result, amqp_table_t* expect) { + int i; + + if (result->num_entries != expect->num_entries) { + return 0; + } + + for (i = 0; i < expect->num_entries; ++i) { + if (!compare_amqp_table_entry(expect->entries[i], result->entries[i])) { + return 0; + } + } + return 1; +} + +static void test_merge_capabilities(amqp_table_t* base, amqp_table_t* add, + amqp_table_t* expect) { + amqp_pool_t pool; + amqp_table_t result; + int res; + init_amqp_pool(&pool, 4096); + + res = amqp_merge_capabilities(base, add, &result, &pool); + if (AMQP_STATUS_OK != res) { + fprintf(stderr, "amqp_merge_capabilities returned !ok: %d\n", res); + abort(); + } + + if (!compare_amqp_table(&result, expect)) { + fprintf(stderr, "amqp_merge_capabilities incorrect result.\n"); + abort(); + } + empty_amqp_pool(&pool); + return; +} + +int main(void) { + { + amqp_table_t sub_base; + amqp_table_t sub_add; + amqp_table_t sub_expect; + amqp_table_t base; + amqp_table_t add; + amqp_table_t expect; + + amqp_table_entry_t sub_base_entries[1]; + amqp_table_entry_t sub_add_entries[2]; + amqp_table_entry_t sub_expect_entries[2]; + + amqp_table_entry_t base_entries[3]; + amqp_table_entry_t add_entries[3]; + amqp_table_entry_t expect_entries[4]; + + sub_base_entries[0] = amqp_table_construct_utf8_entry("foo", "bar"); + sub_base.num_entries = + sizeof(sub_base_entries) / sizeof(amqp_table_entry_t); + sub_base.entries = sub_base_entries; + + sub_add_entries[0] = amqp_table_construct_utf8_entry("something", "else"); + sub_add_entries[1] = amqp_table_construct_utf8_entry("foo", "baz"); + sub_add.num_entries = sizeof(sub_add_entries) / sizeof(amqp_table_entry_t); + sub_add.entries = sub_add_entries; + + sub_expect_entries[0] = amqp_table_construct_utf8_entry("foo", "baz"); + sub_expect_entries[1] = + amqp_table_construct_utf8_entry("something", "else"); + sub_expect.num_entries = + sizeof(sub_expect_entries) / sizeof(amqp_table_entry_t); + sub_expect.entries = sub_expect_entries; + + base_entries[0] = amqp_table_construct_utf8_entry("product", "1.0"); + base_entries[1] = amqp_table_construct_utf8_entry("nooverride", "yeah"); + base_entries[2] = amqp_table_construct_table_entry("props", &sub_base); + base.num_entries = sizeof(base_entries) / sizeof(amqp_table_entry_t); + base.entries = base_entries; + + add_entries[0] = amqp_table_construct_bool_entry("bool_entry", 1); + add_entries[1] = amqp_table_construct_utf8_entry("product", "2.0"); + add_entries[2] = amqp_table_construct_table_entry("props", &sub_add); + add.num_entries = sizeof(add_entries) / sizeof(amqp_table_entry_t); + add.entries = add_entries; + + expect_entries[0] = amqp_table_construct_utf8_entry("product", "2.0"), + expect_entries[1] = amqp_table_construct_utf8_entry("nooverride", "yeah"), + expect_entries[2] = amqp_table_construct_table_entry("props", &sub_expect); + expect_entries[3] = amqp_table_construct_bool_entry("bool_entry", 1); + expect.num_entries = sizeof(expect_entries) / sizeof(amqp_table_entry_t); + expect.entries = expect_entries; + + test_merge_capabilities(&base, &add, &expect); + } + fprintf(stderr, "ok\n"); + return 0; +} diff --git a/librab/build/tests/test_parse_url.c b/librab/build/tests/test_parse_url.c new file mode 100644 index 0000000..9cdc87c --- /dev/null +++ b/librab/build/tests/test_parse_url.c @@ -0,0 +1,220 @@ +/* + * ***** BEGIN LICENSE BLOCK ***** + * Version: MIT + * + * Portions created by Alan Antonuk are Copyright (c) 2012-2013 + * Alan Antonuk. All Rights Reserved. + * + * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc. + * All Rights Reserved. + * + * Portions created by Tony Garnock-Jones are Copyright (c) 2009-2010 + * VMware, Inc. and Tony Garnock-Jones. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * ***** END LICENSE BLOCK ***** + */ + +#include "config.h" + +#ifdef _MSC_VER +/* MSVC complains about strdup being deprecated in favor of _strdup */ +#define _CRT_NONSTDC_NO_DEPRECATE +#endif + +#include +#include +#include + +#include + +#include + +static void match_string(const char *what, const char *expect, + const char *got) { + if (strcmp(got, expect)) { + fprintf(stderr, "Expected %s '%s', got '%s'\n", what, expect, got); + abort(); + } +} + +static void match_int(const char *what, int expect, int got) { + if (got != expect) { + fprintf(stderr, "Expected %s '%d', got '%d'\n", what, expect, got); + abort(); + } +} + +static void parse_success(const char *url, const char *user, + const char *password, const char *host, int port, + const char *vhost) { + char *s = strdup(url); + struct amqp_connection_info ci; + int res; + + res = amqp_parse_url(s, &ci); + if (res) { + fprintf(stderr, "Expected to successfully parse URL, but didn't: %s (%s)\n", + url, amqp_error_string2(res)); + abort(); + } + + match_string("user", user, ci.user); + match_string("password", password, ci.password); + match_string("host", host, ci.host); + match_int("port", port, ci.port); + match_string("vhost", vhost, ci.vhost); + + free(s); +} + +static void parse_fail(const char *url) { + char *s = strdup(url); + struct amqp_connection_info ci; + + amqp_default_connection_info(&ci); + if (amqp_parse_url(s, &ci) >= 0) { + fprintf(stderr, "Expected to fail parsing URL, but didn't: %s\n", url); + abort(); + } + + free(s); +} + +int main(void) { + /* From the spec */ + parse_success("amqp://user:pass@host:10000/vhost", "user", "pass", "host", + 10000, "vhost"); + parse_success("amqps://user:pass@host:10000/vhost", "user", "pass", "host", + 10000, "vhost"); + + parse_success("amqp://user%61:%61pass@ho%61st:10000/v%2fhost", "usera", + "apass", "hoast", 10000, "v/host"); + parse_success("amqps://user%61:%61pass@ho%61st:10000/v%2fhost", "usera", + "apass", "hoast", 10000, "v/host"); + + parse_success("amqp://", "guest", "guest", "localhost", 5672, "/"); + parse_success("amqps://", "guest", "guest", "localhost", 5671, "/"); + + parse_success("amqp://:@/", "", "", "localhost", 5672, ""); + parse_success("amqps://:@/", "", "", "localhost", 5671, ""); + + parse_success("amqp://user@", "user", "guest", "localhost", 5672, "/"); + parse_success("amqps://user@", "user", "guest", "localhost", 5671, "/"); + + parse_success("amqp://user:pass@", "user", "pass", "localhost", 5672, "/"); + parse_success("amqps://user:pass@", "user", "pass", "localhost", 5671, "/"); + + parse_success("amqp://host", "guest", "guest", "host", 5672, "/"); + parse_success("amqps://host", "guest", "guest", "host", 5671, "/"); + + parse_success("amqp://:10000", "guest", "guest", "localhost", 10000, "/"); + parse_success("amqps://:10000", "guest", "guest", "localhost", 10000, "/"); + + parse_success("amqp:///vhost", "guest", "guest", "localhost", 5672, "vhost"); + parse_success("amqps:///vhost", "guest", "guest", "localhost", 5671, "vhost"); + + parse_success("amqp://host/", "guest", "guest", "host", 5672, ""); + parse_success("amqps://host/", "guest", "guest", "host", 5671, ""); + + parse_success("amqp://host/%2f", "guest", "guest", "host", 5672, "/"); + parse_success("amqps://host/%2f", "guest", "guest", "host", 5671, "/"); + + parse_success("amqp://[::1]", "guest", "guest", "::1", 5672, "/"); + parse_success("amqps://[::1]", "guest", "guest", "::1", 5671, "/"); + + /* Various other success cases */ + parse_success("amqp://host:100", "guest", "guest", "host", 100, "/"); + parse_success("amqps://host:100", "guest", "guest", "host", 100, "/"); + + parse_success("amqp://[::1]:100", "guest", "guest", "::1", 100, "/"); + parse_success("amqps://[::1]:100", "guest", "guest", "::1", 100, "/"); + + parse_success("amqp://host/blah", "guest", "guest", "host", 5672, "blah"); + parse_success("amqps://host/blah", "guest", "guest", "host", 5671, "blah"); + + parse_success("amqp://host:100/blah", "guest", "guest", "host", 100, "blah"); + parse_success("amqps://host:100/blah", "guest", "guest", "host", 100, "blah"); + + parse_success("amqp://:100/blah", "guest", "guest", "localhost", 100, "blah"); + parse_success("amqps://:100/blah", "guest", "guest", "localhost", 100, + "blah"); + + parse_success("amqp://[::1]/blah", "guest", "guest", "::1", 5672, "blah"); + parse_success("amqps://[::1]/blah", "guest", "guest", "::1", 5671, "blah"); + + parse_success("amqp://[::1]:100/blah", "guest", "guest", "::1", 100, "blah"); + parse_success("amqps://[::1]:100/blah", "guest", "guest", "::1", 100, "blah"); + + parse_success("amqp://user:pass@host", "user", "pass", "host", 5672, "/"); + parse_success("amqps://user:pass@host", "user", "pass", "host", 5671, "/"); + + parse_success("amqp://user:pass@host:100", "user", "pass", "host", 100, "/"); + parse_success("amqps://user:pass@host:100", "user", "pass", "host", 100, "/"); + + parse_success("amqp://user:pass@:100", "user", "pass", "localhost", 100, "/"); + parse_success("amqps://user:pass@:100", "user", "pass", "localhost", 100, + "/"); + + parse_success("amqp://user:pass@[::1]", "user", "pass", "::1", 5672, "/"); + parse_success("amqps://user:pass@[::1]", "user", "pass", "::1", 5671, "/"); + + parse_success("amqp://user:pass@[::1]:100", "user", "pass", "::1", 100, "/"); + parse_success("amqps://user:pass@[::1]:100", "user", "pass", "::1", 100, "/"); + + /* Various failure cases */ + parse_fail("http://www.rabbitmq.com"); + + parse_fail("amqp://foo:bar:baz"); + parse_fail("amqps://foo:bar:baz"); + + parse_fail("amqp://foo[::1]"); + parse_fail("amqps://foo[::1]"); + + parse_fail("amqp://foo[::1]"); + parse_fail("amqps://foo[::1]"); + + parse_fail("amqp://foo:[::1]"); + parse_fail("amqps://foo:[::1]"); + + parse_fail("amqp://[::1]foo"); + parse_fail("amqps://[::1]foo"); + + parse_fail("amqp://foo:1000xyz"); + parse_fail("amqps://foo:1000xyz"); + + parse_fail("amqp://foo:1000000"); + parse_fail("amqps://foo:1000000"); + + parse_fail("amqp://foo/bar/baz"); + parse_fail("amqps://foo/bar/baz"); + + parse_fail("amqp://foo%1"); + parse_fail("amqps://foo%1"); + + parse_fail("amqp://foo%1x"); + parse_fail("amqps://foo%1x"); + + parse_fail("amqp://foo%xy"); + parse_fail("amqps://foo%xy"); + + return 0; +} diff --git a/librab/build/tests/test_sasl_mechanism b/librab/build/tests/test_sasl_mechanism new file mode 100644 index 0000000000000000000000000000000000000000..ba68665ad7238b2fc669bfa80783871ee7499537 GIT binary patch literal 86520 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 literal 0 HcmV?d00001 diff --git a/librab/build/tests/test_sasl_mechanism.c b/librab/build/tests/test_sasl_mechanism.c new file mode 100644 index 0000000..7848219 --- /dev/null +++ b/librab/build/tests/test_sasl_mechanism.c @@ -0,0 +1,70 @@ +/* + * ***** BEGIN LICENSE BLOCK ***** + * Version: MIT + * + * Portions created by Alan Antonuk are Copyright (c) 2012-2013 + * Alan Antonuk. All Rights Reserved. + * + * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc. + * All Rights Reserved. + * + * Portions created by Tony Garnock-Jones are Copyright (c) 2009-2010 + * VMware, Inc. and Tony Garnock-Jones. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * ***** END LICENSE BLOCK ***** + */ + +#include +#include +#include + +#include + +static void parse_success(amqp_bytes_t mechanisms, + amqp_sasl_method_enum method) { + if (!sasl_mechanism_in_list(mechanisms, method)) { + fprintf(stderr, "Expected to find mechanism in list, but didn't: %s\n", + (char *)mechanisms.bytes); + abort(); + } +} + +static void parse_fail(amqp_bytes_t mechanisms, amqp_sasl_method_enum method) { + if (sasl_mechanism_in_list(mechanisms, method)) { + fprintf(stderr, + "Expected the mechanism not on the list, but it was present: %s\n", + (char *)mechanisms.bytes); + abort(); + } +} + +int main(void) { + parse_success(amqp_cstring_bytes("DIGEST-MD5 CRAM-MD5 LOGIN PLAIN"), + AMQP_SASL_METHOD_PLAIN); + parse_fail(amqp_cstring_bytes("DIGEST-MD5 CRAM-MD5 LOGIN PLAIN"), + AMQP_SASL_METHOD_EXTERNAL); + parse_success(amqp_cstring_bytes("DIGEST-MD5 CRAM-MD5 EXTERNAL"), + AMQP_SASL_METHOD_EXTERNAL); + parse_fail(amqp_cstring_bytes("DIGEST-MD5 CRAM-MD5 EXTERNAL"), + AMQP_SASL_METHOD_PLAIN); + return 0; +} diff --git a/librab/build/tests/test_status_enum.c b/librab/build/tests/test_status_enum.c new file mode 100644 index 0000000..2f2dbd7 --- /dev/null +++ b/librab/build/tests/test_status_enum.c @@ -0,0 +1,52 @@ +/* + * Copyright 2015 Alan Antonuk + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "amqp.h" + +#include +#include +#include + +static void check_errorstrings(amqp_status_enum start, amqp_status_enum end) { + int i; + for (i = start; i > end; --i) { + const char* err = amqp_error_string2(i); + if (0 == strcmp(err, "(unknown error)")) { + printf("amqp_status_enum value %s%X", i < 0 ? "-" : "", (unsigned)i); + abort(); + } + } +} + +int main(void) { + check_errorstrings(AMQP_STATUS_OK, _AMQP_STATUS_NEXT_VALUE); + check_errorstrings(AMQP_STATUS_TCP_ERROR, _AMQP_STATUS_TCP_NEXT_VALUE); + check_errorstrings(AMQP_STATUS_SSL_ERROR, _AMQP_STATUS_SSL_NEXT_VALUE); + + return 0; +} diff --git a/librab/build/tests/test_tables.c b/librab/build/tests/test_tables.c new file mode 100644 index 0000000..89ece6b --- /dev/null +++ b/librab/build/tests/test_tables.c @@ -0,0 +1,466 @@ +/* + * ***** BEGIN LICENSE BLOCK ***** + * Version: MIT + * + * Portions created by Alan Antonuk are Copyright (c) 2012-2013 + * Alan Antonuk. All Rights Reserved. + * + * Portions created by VMware are Copyright (c) 2007-2012 VMware, Inc. + * All Rights Reserved. + * + * Portions created by Tony Garnock-Jones are Copyright (c) 2009-2010 + * VMware, Inc. and Tony Garnock-Jones. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * ***** END LICENSE BLOCK ***** + */ + +#ifdef _MSC_VER +#define _USE_MATH_DEFINES +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include +#include +#include +#include +#include + +#include + +#include + +#include + +void die(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fprintf(stderr, "\n"); + abort(); +} + +static void dump_indent(int indent, FILE *out) { + int i; + + for (i = 0; i < indent; i++) { + fputc(' ', out); + } +} + +static void dump_value(int indent, amqp_field_value_t v, FILE *out) { + int i; + + dump_indent(indent, out); + fputc(v.kind, out); + + switch (v.kind) { + case AMQP_FIELD_KIND_BOOLEAN: + fputs(v.value.boolean ? " true\n" : " false\n", out); + break; + + case AMQP_FIELD_KIND_I8: + fprintf(out, " %" PRId8 "\n", v.value.i8); + break; + + case AMQP_FIELD_KIND_U8: + fprintf(out, " %" PRIu8 "\n", v.value.u8); + break; + + case AMQP_FIELD_KIND_I16: + fprintf(out, " %" PRId16 "\n", v.value.i16); + break; + + case AMQP_FIELD_KIND_U16: + fprintf(out, " %" PRIu16 "\n", v.value.u16); + break; + + case AMQP_FIELD_KIND_I32: + fprintf(out, " %" PRId32 "\n", v.value.i32); + break; + + case AMQP_FIELD_KIND_U32: + fprintf(out, " %" PRIu32 "\n", v.value.u32); + break; + + case AMQP_FIELD_KIND_I64: + fprintf(out, " %" PRId64 "\n", v.value.i64); + break; + + case AMQP_FIELD_KIND_F32: + fprintf(out, " %g\n", (double)v.value.f32); + break; + + case AMQP_FIELD_KIND_F64: + fprintf(out, " %g\n", v.value.f64); + break; + + case AMQP_FIELD_KIND_DECIMAL: + fprintf(out, " %u:::%u\n", v.value.decimal.decimals, + v.value.decimal.value); + break; + + case AMQP_FIELD_KIND_UTF8: + fprintf(out, " %.*s\n", (int)v.value.bytes.len, + (char *)v.value.bytes.bytes); + break; + + case AMQP_FIELD_KIND_BYTES: + fputc(' ', out); + for (i = 0; i < (int)v.value.bytes.len; i++) { + fprintf(out, "%02x", ((char *)v.value.bytes.bytes)[i]); + } + + fputc('\n', out); + break; + + case AMQP_FIELD_KIND_ARRAY: + fputc('\n', out); + for (i = 0; i < v.value.array.num_entries; i++) { + dump_value(indent + 2, v.value.array.entries[i], out); + } + + break; + + case AMQP_FIELD_KIND_TIMESTAMP: + fprintf(out, " %" PRIu64 "\n", v.value.u64); + break; + + case AMQP_FIELD_KIND_TABLE: + fputc('\n', out); + for (i = 0; i < v.value.table.num_entries; i++) { + dump_indent(indent + 2, out); + fprintf(out, "%.*s ->\n", (int)v.value.table.entries[i].key.len, + (char *)v.value.table.entries[i].key.bytes); + dump_value(indent + 4, v.value.table.entries[i].value, out); + } + + break; + + case AMQP_FIELD_KIND_VOID: + fputc('\n', out); + break; + + default: + fprintf(out, "???\n"); + break; + } +} + +static void test_dump_value(FILE *out) { + amqp_table_entry_t entries[8]; + amqp_table_t table; + amqp_field_value_t val; + + entries[0].key = amqp_cstring_bytes("zebra"); + entries[0].value.kind = AMQP_FIELD_KIND_UTF8; + entries[0].value.value.bytes = amqp_cstring_bytes("last"); + + entries[1].key = amqp_cstring_bytes("aardvark"); + entries[1].value.kind = AMQP_FIELD_KIND_UTF8; + entries[1].value.value.bytes = amqp_cstring_bytes("first"); + + entries[2].key = amqp_cstring_bytes("middle"); + entries[2].value.kind = AMQP_FIELD_KIND_UTF8; + entries[2].value.value.bytes = amqp_cstring_bytes("third"); + + entries[3].key = amqp_cstring_bytes("number"); + entries[3].value.kind = AMQP_FIELD_KIND_I32; + entries[3].value.value.i32 = 1234; + + entries[4].key = amqp_cstring_bytes("decimal"); + entries[4].value.kind = AMQP_FIELD_KIND_DECIMAL; + entries[4].value.value.decimal.decimals = 2; + entries[4].value.value.decimal.value = 1234; + + entries[5].key = amqp_cstring_bytes("time"); + entries[5].value.kind = AMQP_FIELD_KIND_TIMESTAMP; + entries[5].value.value.u64 = 1234123412341234; + + entries[6].key = amqp_cstring_bytes("beta"); + entries[6].value.kind = AMQP_FIELD_KIND_UTF8; + entries[6].value.value.bytes = amqp_cstring_bytes("second"); + + entries[7].key = amqp_cstring_bytes("wombat"); + entries[7].value.kind = AMQP_FIELD_KIND_UTF8; + entries[7].value.value.bytes = amqp_cstring_bytes("fourth"); + + table.num_entries = 8; + table.entries = entries; + + qsort(table.entries, table.num_entries, sizeof(amqp_table_entry_t), + &amqp_table_entry_cmp); + + val.kind = AMQP_FIELD_KIND_TABLE; + val.value.table = table; + + dump_value(0, val, out); +} + +static uint8_t pre_encoded_table[] = { + 0x00, 0x00, 0x00, 0xff, 0x07, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x74, 0x72, + 0x53, 0x00, 0x00, 0x00, 0x15, 0x48, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, + 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x69, 0x6e, 0x74, + 0x49, 0x00, 0x00, 0x30, 0x39, 0x07, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x44, 0x03, 0x00, 0x01, 0xe2, 0x40, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x00, 0x00, 0x63, 0xee, 0xa0, 0x53, + 0xc1, 0x94, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x00, 0x00, 0x00, + 0x1f, 0x03, 0x6f, 0x6e, 0x65, 0x49, 0x00, 0x00, 0xd4, 0x31, 0x03, 0x74, + 0x77, 0x6f, 0x53, 0x00, 0x00, 0x00, 0x0d, 0x41, 0x20, 0x6c, 0x6f, 0x6e, + 0x67, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x04, 0x62, 0x79, 0x74, + 0x65, 0x62, 0xff, 0x04, 0x6c, 0x6f, 0x6e, 0x67, 0x6c, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x96, 0x02, 0xd2, 0x05, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x73, + 0x02, 0x8f, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x74, 0x01, 0x06, 0x62, 0x69, + 0x6e, 0x61, 0x72, 0x79, 0x78, 0x00, 0x00, 0x00, 0x0f, 0x61, 0x20, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x04, 0x76, 0x6f, 0x69, 0x64, 0x56, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, + 0x41, 0x00, 0x00, 0x00, 0x17, 0x49, 0x00, 0x00, 0xd4, 0x31, 0x53, 0x00, + 0x00, 0x00, 0x0d, 0x41, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x66, 0x40, + 0x49, 0x0f, 0xdb, 0x06, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x64, 0x40, + 0x09, 0x21, 0xfb, 0x54, 0x44, 0x2d, 0x18}; + +static void test_table_codec(FILE *out) { + amqp_pool_t pool; + int result; + + amqp_table_entry_t inner_entries[2]; + amqp_table_t inner_table; + + amqp_field_value_t inner_values[2]; + amqp_array_t inner_array; + + amqp_table_entry_t entries[14]; + amqp_table_t table; + + inner_entries[0].key = amqp_cstring_bytes("one"); + inner_entries[0].value.kind = AMQP_FIELD_KIND_I32; + inner_entries[0].value.value.i32 = 54321; + + inner_entries[1].key = amqp_cstring_bytes("two"); + inner_entries[1].value.kind = AMQP_FIELD_KIND_UTF8; + inner_entries[1].value.value.bytes = amqp_cstring_bytes("A long string"); + + inner_table.num_entries = 2; + inner_table.entries = inner_entries; + + inner_values[0].kind = AMQP_FIELD_KIND_I32; + inner_values[0].value.i32 = 54321; + + inner_values[1].kind = AMQP_FIELD_KIND_UTF8; + inner_values[1].value.bytes = amqp_cstring_bytes("A long string"); + + inner_array.num_entries = 2; + inner_array.entries = inner_values; + + entries[0].key = amqp_cstring_bytes("longstr"); + entries[0].value.kind = AMQP_FIELD_KIND_UTF8; + entries[0].value.value.bytes = amqp_cstring_bytes("Here is a long string"); + + entries[1].key = amqp_cstring_bytes("signedint"); + entries[1].value.kind = AMQP_FIELD_KIND_I32; + entries[1].value.value.i32 = 12345; + + entries[2].key = amqp_cstring_bytes("decimal"); + entries[2].value.kind = AMQP_FIELD_KIND_DECIMAL; + entries[2].value.value.decimal.decimals = 3; + entries[2].value.value.decimal.value = 123456; + + entries[3].key = amqp_cstring_bytes("timestamp"); + entries[3].value.kind = AMQP_FIELD_KIND_TIMESTAMP; + entries[3].value.value.u64 = 109876543209876; + + entries[4].key = amqp_cstring_bytes("table"); + entries[4].value.kind = AMQP_FIELD_KIND_TABLE; + entries[4].value.value.table = inner_table; + + entries[5].key = amqp_cstring_bytes("byte"); + entries[5].value.kind = AMQP_FIELD_KIND_I8; + entries[5].value.value.i8 = (int8_t)-1; + + entries[6].key = amqp_cstring_bytes("long"); + entries[6].value.kind = AMQP_FIELD_KIND_I64; + entries[6].value.value.i64 = 1234567890; + + entries[7].key = amqp_cstring_bytes("short"); + entries[7].value.kind = AMQP_FIELD_KIND_I16; + entries[7].value.value.i16 = 655; + + entries[8].key = amqp_cstring_bytes("bool"); + entries[8].value.kind = AMQP_FIELD_KIND_BOOLEAN; + entries[8].value.value.boolean = 1; + + entries[9].key = amqp_cstring_bytes("binary"); + entries[9].value.kind = AMQP_FIELD_KIND_BYTES; + entries[9].value.value.bytes = amqp_cstring_bytes("a binary string"); + + entries[10].key = amqp_cstring_bytes("void"); + entries[10].value.kind = AMQP_FIELD_KIND_VOID; + + entries[11].key = amqp_cstring_bytes("array"); + entries[11].value.kind = AMQP_FIELD_KIND_ARRAY; + entries[11].value.value.array = inner_array; + + entries[12].key = amqp_cstring_bytes("float"); + entries[12].value.kind = AMQP_FIELD_KIND_F32; + entries[12].value.value.f32 = (float)M_PI; + + entries[13].key = amqp_cstring_bytes("double"); + entries[13].value.kind = AMQP_FIELD_KIND_F64; + entries[13].value.value.f64 = M_PI; + + table.num_entries = 14; + table.entries = entries; + + fprintf(out, "AAAAAAAAAA\n"); + + { + amqp_field_value_t val; + val.kind = AMQP_FIELD_KIND_TABLE; + val.value.table = table; + dump_value(0, val, out); + } + + init_amqp_pool(&pool, 4096); + + { + amqp_table_t decoded; + size_t decoding_offset = 0; + amqp_bytes_t decoding_bytes; + decoding_bytes.len = sizeof(pre_encoded_table); + decoding_bytes.bytes = pre_encoded_table; + + result = + amqp_decode_table(decoding_bytes, &pool, &decoded, &decoding_offset); + if (result < 0) { + die("Table decoding failed: %s", amqp_error_string2(result)); + } + + fprintf(out, "BBBBBBBBBB\n"); + + { + amqp_field_value_t val; + val.kind = AMQP_FIELD_KIND_TABLE; + val.value.table = decoded; + + dump_value(0, val, out); + } + } + + { + uint8_t encoding_buffer[4096]; + amqp_bytes_t encoding_result; + size_t offset = 0; + + memset(&encoding_buffer[0], 0, sizeof(encoding_buffer)); + encoding_result.len = sizeof(encoding_buffer); + encoding_result.bytes = &encoding_buffer[0]; + + result = amqp_encode_table(encoding_result, &table, &offset); + if (result < 0) { + die("Table encoding failed: %s", amqp_error_string2(result)); + } + + if (offset != sizeof(pre_encoded_table)) + die("Offset should be %ld, was %ld", (long)sizeof(pre_encoded_table), + (long)offset); + + result = memcmp(pre_encoded_table, encoding_buffer, offset); + if (result != 0) { + die("Table encoding differed", result); + } + } + + empty_amqp_pool(&pool); +} + +#define CHUNK_SIZE 4096 + +static int compare_files(FILE *f1_in, FILE *f2_in) { + char f1_buf[CHUNK_SIZE]; + char f2_buf[CHUNK_SIZE]; + int res; + + rewind(f1_in); + rewind(f2_in); + + for (;;) { + size_t f1_got = fread(f1_buf, 1, CHUNK_SIZE, f1_in); + size_t f2_got = fread(f2_buf, 1, CHUNK_SIZE, f2_in); + res = memcmp(f1_buf, f2_buf, f1_got < f2_got ? f1_got : f2_got); + + if (res) { + break; + } + + if (f1_got < CHUNK_SIZE || f2_got < CHUNK_SIZE) { + if (f1_got != f2_got) { + res = (f1_got < f2_got ? -1 : 1); + } + break; + } + } + + return res; +} + +const char *expected_file_name = "tests/test_tables.expected"; + +int main(void) { + char *srcdir = getenv("srcdir"); + FILE *out, *expected = NULL; + char *expected_path; + + out = tmpfile(); + if (out == NULL) { + die("failed to create temporary file: %s", strerror(errno)); + } + + test_table_codec(out); + fprintf(out, "----------\n"); + test_dump_value(out); + + if (srcdir == NULL) { + srcdir = "."; + } + + expected_path = malloc(strlen(srcdir) + strlen(expected_file_name) + 2); + if (!expected_path) { + die("out of memory"); + } + sprintf(expected_path, "%s/%s", srcdir, expected_file_name); + expected = fopen(expected_path, "r"); + if (!expected) { + die("failed to open %s: %s", expected_path, strerror(errno)); + } + + if (compare_files(expected, out)) { + die("output file did not have expected contents"); + } + + fclose(expected); + free(expected_path); + fclose(out); + + return 0; +} diff --git a/librab/build/tests/test_tables.expected b/librab/build/tests/test_tables.expected new file mode 100644 index 0000000..44d2085 --- /dev/null +++ b/librab/build/tests/test_tables.expected @@ -0,0 +1,90 @@ +AAAAAAAAAA +F + longstr -> + S Here is a long string + signedint -> + I 12345 + decimal -> + D 3:::123456 + timestamp -> + T 109876543209876 + table -> + F + one -> + I 54321 + two -> + S A long string + byte -> + b -1 + long -> + l 1234567890 + short -> + s 655 + bool -> + t true + binary -> + x 612062696e61727920737472696e67 + void -> + V + array -> + A + I 54321 + S A long string + float -> + f 3.14159 + double -> + d 3.14159 +BBBBBBBBBB +F + longstr -> + S Here is a long string + signedint -> + I 12345 + decimal -> + D 3:::123456 + timestamp -> + T 109876543209876 + table -> + F + one -> + I 54321 + two -> + S A long string + byte -> + b -1 + long -> + l 1234567890 + short -> + s 655 + bool -> + t true + binary -> + x 612062696e61727920737472696e67 + void -> + V + array -> + A + I 54321 + S A long string + float -> + f 3.14159 + double -> + d 3.14159 +---------- +F + aardvark -> + S first + beta -> + S second + decimal -> + D 2:::1234 + middle -> + S third + number -> + I 1234 + time -> + T 1234123412341234 + wombat -> + S fourth + zebra -> + S last diff --git a/librab/build/tests/tests/test_tables.expected b/librab/build/tests/tests/test_tables.expected new file mode 100644 index 0000000..44d2085 --- /dev/null +++ b/librab/build/tests/tests/test_tables.expected @@ -0,0 +1,90 @@ +AAAAAAAAAA +F + longstr -> + S Here is a long string + signedint -> + I 12345 + decimal -> + D 3:::123456 + timestamp -> + T 109876543209876 + table -> + F + one -> + I 54321 + two -> + S A long string + byte -> + b -1 + long -> + l 1234567890 + short -> + s 655 + bool -> + t true + binary -> + x 612062696e61727920737472696e67 + void -> + V + array -> + A + I 54321 + S A long string + float -> + f 3.14159 + double -> + d 3.14159 +BBBBBBBBBB +F + longstr -> + S Here is a long string + signedint -> + I 12345 + decimal -> + D 3:::123456 + timestamp -> + T 109876543209876 + table -> + F + one -> + I 54321 + two -> + S A long string + byte -> + b -1 + long -> + l 1234567890 + short -> + s 655 + bool -> + t true + binary -> + x 612062696e61727920737472696e67 + void -> + V + array -> + A + I 54321 + S A long string + float -> + f 3.14159 + double -> + d 3.14159 +---------- +F + aardvark -> + S first + beta -> + S second + decimal -> + D 2:::1234 + middle -> + S third + number -> + I 1234 + time -> + T 1234123412341234 + wombat -> + S fourth + zebra -> + S last diff --git a/librab/build/tests/win32/msinttypes/inttypes.h b/librab/build/tests/win32/msinttypes/inttypes.h new file mode 100644 index 0000000..f437cf4 --- /dev/null +++ b/librab/build/tests/win32/msinttypes/inttypes.h @@ -0,0 +1,304 @@ +// ISO C9x compliant inttypes.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006 Alexander Chemeris +// +// 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. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _MSC_VER // [ +#error "Use this header only with Microsoft Visual C++ compilers!" +#endif // _MSC_VER ] + +#ifndef _MSC_INTTYPES_H_ // [ +#define _MSC_INTTYPES_H_ + +#if _MSC_VER > 1000 +#pragma once +#endif + +#include "stdint.h" + +// 7.8 Format conversion of integer types + +typedef struct { + intmax_t quot; + intmax_t rem; +} imaxdiv_t; + +// 7.8.1 Macros for format specifiers + +#if !defined(__cplusplus) || \ + defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 + +// The fprintf macros for signed integers are: +#define PRId8 "d" +#define PRIi8 "i" +#define PRIdLEAST8 "d" +#define PRIiLEAST8 "i" +#define PRIdFAST8 "d" +#define PRIiFAST8 "i" + +#define PRId16 "hd" +#define PRIi16 "hi" +#define PRIdLEAST16 "hd" +#define PRIiLEAST16 "hi" +#define PRIdFAST16 "hd" +#define PRIiFAST16 "hi" + +#define PRId32 "I32d" +#define PRIi32 "I32i" +#define PRIdLEAST32 "I32d" +#define PRIiLEAST32 "I32i" +#define PRIdFAST32 "I32d" +#define PRIiFAST32 "I32i" + +#define PRId64 "I64d" +#define PRIi64 "I64i" +#define PRIdLEAST64 "I64d" +#define PRIiLEAST64 "I64i" +#define PRIdFAST64 "I64d" +#define PRIiFAST64 "I64i" + +#define PRIdMAX "I64d" +#define PRIiMAX "I64i" + +#define PRIdPTR "Id" +#define PRIiPTR "Ii" + +// The fprintf macros for unsigned integers are: +#define PRIo8 "o" +#define PRIu8 "u" +#define PRIx8 "x" +#define PRIX8 "X" +#define PRIoLEAST8 "o" +#define PRIuLEAST8 "u" +#define PRIxLEAST8 "x" +#define PRIXLEAST8 "X" +#define PRIoFAST8 "o" +#define PRIuFAST8 "u" +#define PRIxFAST8 "x" +#define PRIXFAST8 "X" + +#define PRIo16 "ho" +#define PRIu16 "hu" +#define PRIx16 "hx" +#define PRIX16 "hX" +#define PRIoLEAST16 "ho" +#define PRIuLEAST16 "hu" +#define PRIxLEAST16 "hx" +#define PRIXLEAST16 "hX" +#define PRIoFAST16 "ho" +#define PRIuFAST16 "hu" +#define PRIxFAST16 "hx" +#define PRIXFAST16 "hX" + +#define PRIo32 "I32o" +#define PRIu32 "I32u" +#define PRIx32 "I32x" +#define PRIX32 "I32X" +#define PRIoLEAST32 "I32o" +#define PRIuLEAST32 "I32u" +#define PRIxLEAST32 "I32x" +#define PRIXLEAST32 "I32X" +#define PRIoFAST32 "I32o" +#define PRIuFAST32 "I32u" +#define PRIxFAST32 "I32x" +#define PRIXFAST32 "I32X" + +#define PRIo64 "I64o" +#define PRIu64 "I64u" +#define PRIx64 "I64x" +#define PRIX64 "I64X" +#define PRIoLEAST64 "I64o" +#define PRIuLEAST64 "I64u" +#define PRIxLEAST64 "I64x" +#define PRIXLEAST64 "I64X" +#define PRIoFAST64 "I64o" +#define PRIuFAST64 "I64u" +#define PRIxFAST64 "I64x" +#define PRIXFAST64 "I64X" + +#define PRIoMAX "I64o" +#define PRIuMAX "I64u" +#define PRIxMAX "I64x" +#define PRIXMAX "I64X" + +#define PRIoPTR "Io" +#define PRIuPTR "Iu" +#define PRIxPTR "Ix" +#define PRIXPTR "IX" + +// The fscanf macros for signed integers are: +#define SCNd8 "d" +#define SCNi8 "i" +#define SCNdLEAST8 "d" +#define SCNiLEAST8 "i" +#define SCNdFAST8 "d" +#define SCNiFAST8 "i" + +#define SCNd16 "hd" +#define SCNi16 "hi" +#define SCNdLEAST16 "hd" +#define SCNiLEAST16 "hi" +#define SCNdFAST16 "hd" +#define SCNiFAST16 "hi" + +#define SCNd32 "ld" +#define SCNi32 "li" +#define SCNdLEAST32 "ld" +#define SCNiLEAST32 "li" +#define SCNdFAST32 "ld" +#define SCNiFAST32 "li" + +#define SCNd64 "I64d" +#define SCNi64 "I64i" +#define SCNdLEAST64 "I64d" +#define SCNiLEAST64 "I64i" +#define SCNdFAST64 "I64d" +#define SCNiFAST64 "I64i" + +#define SCNdMAX "I64d" +#define SCNiMAX "I64i" + +#ifdef _WIN64 // [ +#define SCNdPTR "I64d" +#define SCNiPTR "I64i" +#else // _WIN64 ][ +#define SCNdPTR "ld" +#define SCNiPTR "li" +#endif // _WIN64 ] + +// The fscanf macros for unsigned integers are: +#define SCNo8 "o" +#define SCNu8 "u" +#define SCNx8 "x" +#define SCNX8 "X" +#define SCNoLEAST8 "o" +#define SCNuLEAST8 "u" +#define SCNxLEAST8 "x" +#define SCNXLEAST8 "X" +#define SCNoFAST8 "o" +#define SCNuFAST8 "u" +#define SCNxFAST8 "x" +#define SCNXFAST8 "X" + +#define SCNo16 "ho" +#define SCNu16 "hu" +#define SCNx16 "hx" +#define SCNX16 "hX" +#define SCNoLEAST16 "ho" +#define SCNuLEAST16 "hu" +#define SCNxLEAST16 "hx" +#define SCNXLEAST16 "hX" +#define SCNoFAST16 "ho" +#define SCNuFAST16 "hu" +#define SCNxFAST16 "hx" +#define SCNXFAST16 "hX" + +#define SCNo32 "lo" +#define SCNu32 "lu" +#define SCNx32 "lx" +#define SCNX32 "lX" +#define SCNoLEAST32 "lo" +#define SCNuLEAST32 "lu" +#define SCNxLEAST32 "lx" +#define SCNXLEAST32 "lX" +#define SCNoFAST32 "lo" +#define SCNuFAST32 "lu" +#define SCNxFAST32 "lx" +#define SCNXFAST32 "lX" + +#define SCNo64 "I64o" +#define SCNu64 "I64u" +#define SCNx64 "I64x" +#define SCNX64 "I64X" +#define SCNoLEAST64 "I64o" +#define SCNuLEAST64 "I64u" +#define SCNxLEAST64 "I64x" +#define SCNXLEAST64 "I64X" +#define SCNoFAST64 "I64o" +#define SCNuFAST64 "I64u" +#define SCNxFAST64 "I64x" +#define SCNXFAST64 "I64X" + +#define SCNoMAX "I64o" +#define SCNuMAX "I64u" +#define SCNxMAX "I64x" +#define SCNXMAX "I64X" + +#ifdef _WIN64 // [ +#define SCNoPTR "I64o" +#define SCNuPTR "I64u" +#define SCNxPTR "I64x" +#define SCNXPTR "I64X" +#else // _WIN64 ][ +#define SCNoPTR "lo" +#define SCNuPTR "lu" +#define SCNxPTR "lx" +#define SCNXPTR "lX" +#endif // _WIN64 ] + +#endif // __STDC_FORMAT_MACROS ] + +// 7.8.2 Functions for greatest-width integer types + +// 7.8.2.1 The imaxabs function +#define imaxabs _abs64 + +// 7.8.2.2 The imaxdiv function + +// This is modified version of div() function from Microsoft's div.c found +// in %MSVC.NET%\crt\src\div.c +#ifdef STATIC_IMAXDIV // [ +static +#else // STATIC_IMAXDIV ][ +_inline +#endif // STATIC_IMAXDIV ] + imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) { + imaxdiv_t result; + + result.quot = numer / denom; + result.rem = numer % denom; + + if (numer < 0 && result.rem > 0) { + // did division wrong; must fix up + ++result.quot; + result.rem -= denom; + } + + return result; +} + +// 7.8.2.3 The strtoimax and strtoumax functions +#define strtoimax _strtoi64 +#define strtoumax _strtoui64 + +// 7.8.2.4 The wcstoimax and wcstoumax functions +#define wcstoimax _wcstoi64 +#define wcstoumax _wcstoui64 + +#endif // _MSC_INTTYPES_H_ ]