From dda049ce18193dbd45478aa79e99a49be5d0f347 Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Sat, 21 Feb 2015 00:39:32 +0100 Subject: Various MacOS build fixes. -) Secure files shouldn't be in the base grpc. -) grpc++ depends on gpr. -) grpc++ depends on protobuf (!) --- Makefile | 58 ++++++++++-------------- build.json | 21 ++++----- templates/Makefile.template | 3 ++ vsprojects/vs2013/grpc.vcxproj | 32 ++++++------- vsprojects/vs2013/grpc.vcxproj.filters | 60 ++++++++++++------------- vsprojects/vs2013/grpc_shared.vcxproj | 32 ++++++------- vsprojects/vs2013/grpc_shared.vcxproj.filters | 60 ++++++++++++------------- vsprojects/vs2013/grpc_unsecure.vcxproj | 16 ------- vsprojects/vs2013/grpc_unsecure.vcxproj.filters | 33 -------------- 9 files changed, 129 insertions(+), 186 deletions(-) diff --git a/Makefile b/Makefile index e45ca3fb44..99e12fdfac 100644 --- a/Makefile +++ b/Makefile @@ -2233,6 +2233,10 @@ $(OBJDIR)/$(CONFIG)/test/core/util/test_config.o: LIBGRPC_SRC = \ + src/core/httpcli/format_request.c \ + src/core/httpcli/httpcli.c \ + src/core/httpcli/httpcli_security_context.c \ + src/core/httpcli/parser.c \ src/core/security/auth.c \ src/core/security/base64.c \ src/core/security/credentials.c \ @@ -2242,6 +2246,8 @@ LIBGRPC_SRC = \ src/core/security/secure_transport_setup.c \ src/core/security/security_context.c \ src/core/security/server_secure_chttp2.c \ + src/core/surface/secure_channel_create.c \ + src/core/surface/secure_server_create.c \ src/core/tsi/fake_transport_security.c \ src/core/tsi/ssl_transport_security.c \ src/core/tsi/transport_security.c \ @@ -2260,10 +2266,6 @@ LIBGRPC_SRC = \ src/core/channel/noop_filter.c \ src/core/compression/algorithm.c \ src/core/compression/message_compress.c \ - src/core/httpcli/format_request.c \ - src/core/httpcli/httpcli.c \ - src/core/httpcli/httpcli_security_context.c \ - src/core/httpcli/parser.c \ src/core/iomgr/alarm.c \ src/core/iomgr/alarm_heap.c \ src/core/iomgr/endpoint.c \ @@ -2318,8 +2320,6 @@ LIBGRPC_SRC = \ src/core/surface/init.c \ src/core/surface/lame_client.c \ src/core/surface/metadata_array.c \ - src/core/surface/secure_channel_create.c \ - src/core/surface/secure_server_create.c \ src/core/surface/server.c \ src/core/surface/server_chttp2.c \ src/core/surface/server_create.c \ @@ -2372,6 +2372,10 @@ ifneq ($(OPENSSL_DEP),) # This is to ensure the embedded OpenSSL is built beforehand, properly # installing headers to their final destination on the drive. We need this # otherwise parallel compilation will fail if a source is compiled first. +src/core/httpcli/format_request.c: $(OPENSSL_DEP) +src/core/httpcli/httpcli.c: $(OPENSSL_DEP) +src/core/httpcli/httpcli_security_context.c: $(OPENSSL_DEP) +src/core/httpcli/parser.c: $(OPENSSL_DEP) src/core/security/auth.c: $(OPENSSL_DEP) src/core/security/base64.c: $(OPENSSL_DEP) src/core/security/credentials.c: $(OPENSSL_DEP) @@ -2381,6 +2385,8 @@ src/core/security/secure_endpoint.c: $(OPENSSL_DEP) src/core/security/secure_transport_setup.c: $(OPENSSL_DEP) src/core/security/security_context.c: $(OPENSSL_DEP) src/core/security/server_secure_chttp2.c: $(OPENSSL_DEP) +src/core/surface/secure_channel_create.c: $(OPENSSL_DEP) +src/core/surface/secure_server_create.c: $(OPENSSL_DEP) src/core/tsi/fake_transport_security.c: $(OPENSSL_DEP) src/core/tsi/ssl_transport_security.c: $(OPENSSL_DEP) src/core/tsi/transport_security.c: $(OPENSSL_DEP) @@ -2399,10 +2405,6 @@ src/core/channel/metadata_buffer.c: $(OPENSSL_DEP) src/core/channel/noop_filter.c: $(OPENSSL_DEP) src/core/compression/algorithm.c: $(OPENSSL_DEP) src/core/compression/message_compress.c: $(OPENSSL_DEP) -src/core/httpcli/format_request.c: $(OPENSSL_DEP) -src/core/httpcli/httpcli.c: $(OPENSSL_DEP) -src/core/httpcli/httpcli_security_context.c: $(OPENSSL_DEP) -src/core/httpcli/parser.c: $(OPENSSL_DEP) src/core/iomgr/alarm.c: $(OPENSSL_DEP) src/core/iomgr/alarm_heap.c: $(OPENSSL_DEP) src/core/iomgr/endpoint.c: $(OPENSSL_DEP) @@ -2457,8 +2459,6 @@ src/core/surface/event_string.c: $(OPENSSL_DEP) src/core/surface/init.c: $(OPENSSL_DEP) src/core/surface/lame_client.c: $(OPENSSL_DEP) src/core/surface/metadata_array.c: $(OPENSSL_DEP) -src/core/surface/secure_channel_create.c: $(OPENSSL_DEP) -src/core/surface/secure_server_create.c: $(OPENSSL_DEP) src/core/surface/server.c: $(OPENSSL_DEP) src/core/surface/server_chttp2.c: $(OPENSSL_DEP) src/core/surface/server_create.c: $(OPENSSL_DEP) @@ -2528,6 +2528,10 @@ ifneq ($(NO_DEPS),true) endif endif +$(OBJDIR)/$(CONFIG)/src/core/httpcli/format_request.o: +$(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli.o: +$(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli_security_context.o: +$(OBJDIR)/$(CONFIG)/src/core/httpcli/parser.o: $(OBJDIR)/$(CONFIG)/src/core/security/auth.o: $(OBJDIR)/$(CONFIG)/src/core/security/base64.o: $(OBJDIR)/$(CONFIG)/src/core/security/credentials.o: @@ -2537,6 +2541,8 @@ $(OBJDIR)/$(CONFIG)/src/core/security/secure_endpoint.o: $(OBJDIR)/$(CONFIG)/src/core/security/secure_transport_setup.o: $(OBJDIR)/$(CONFIG)/src/core/security/security_context.o: $(OBJDIR)/$(CONFIG)/src/core/security/server_secure_chttp2.o: +$(OBJDIR)/$(CONFIG)/src/core/surface/secure_channel_create.o: +$(OBJDIR)/$(CONFIG)/src/core/surface/secure_server_create.o: $(OBJDIR)/$(CONFIG)/src/core/tsi/fake_transport_security.o: $(OBJDIR)/$(CONFIG)/src/core/tsi/ssl_transport_security.o: $(OBJDIR)/$(CONFIG)/src/core/tsi/transport_security.o: @@ -2555,10 +2561,6 @@ $(OBJDIR)/$(CONFIG)/src/core/channel/metadata_buffer.o: $(OBJDIR)/$(CONFIG)/src/core/channel/noop_filter.o: $(OBJDIR)/$(CONFIG)/src/core/compression/algorithm.o: $(OBJDIR)/$(CONFIG)/src/core/compression/message_compress.o: -$(OBJDIR)/$(CONFIG)/src/core/httpcli/format_request.o: -$(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli.o: -$(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli_security_context.o: -$(OBJDIR)/$(CONFIG)/src/core/httpcli/parser.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/alarm.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/alarm_heap.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/endpoint.o: @@ -2613,8 +2615,6 @@ $(OBJDIR)/$(CONFIG)/src/core/surface/event_string.o: $(OBJDIR)/$(CONFIG)/src/core/surface/init.o: $(OBJDIR)/$(CONFIG)/src/core/surface/lame_client.o: $(OBJDIR)/$(CONFIG)/src/core/surface/metadata_array.o: -$(OBJDIR)/$(CONFIG)/src/core/surface/secure_channel_create.o: -$(OBJDIR)/$(CONFIG)/src/core/surface/secure_server_create.o: $(OBJDIR)/$(CONFIG)/src/core/surface/server.o: $(OBJDIR)/$(CONFIG)/src/core/surface/server_chttp2.o: $(OBJDIR)/$(CONFIG)/src/core/surface/server_create.o: @@ -2732,10 +2732,6 @@ LIBGRPC_UNSECURE_SRC = \ src/core/channel/noop_filter.c \ src/core/compression/algorithm.c \ src/core/compression/message_compress.c \ - src/core/httpcli/format_request.c \ - src/core/httpcli/httpcli.c \ - src/core/httpcli/httpcli_security_context.c \ - src/core/httpcli/parser.c \ src/core/iomgr/alarm.c \ src/core/iomgr/alarm_heap.c \ src/core/iomgr/endpoint.c \ @@ -2790,8 +2786,6 @@ LIBGRPC_UNSECURE_SRC = \ src/core/surface/init.c \ src/core/surface/lame_client.c \ src/core/surface/metadata_array.c \ - src/core/surface/secure_channel_create.c \ - src/core/surface/secure_server_create.c \ src/core/surface/server.c \ src/core/surface/server_chttp2.c \ src/core/surface/server_create.c \ @@ -2872,10 +2866,6 @@ $(OBJDIR)/$(CONFIG)/src/core/channel/metadata_buffer.o: $(OBJDIR)/$(CONFIG)/src/core/channel/noop_filter.o: $(OBJDIR)/$(CONFIG)/src/core/compression/algorithm.o: $(OBJDIR)/$(CONFIG)/src/core/compression/message_compress.o: -$(OBJDIR)/$(CONFIG)/src/core/httpcli/format_request.o: -$(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli.o: -$(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli_security_context.o: -$(OBJDIR)/$(CONFIG)/src/core/httpcli/parser.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/alarm.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/alarm_heap.o: $(OBJDIR)/$(CONFIG)/src/core/iomgr/endpoint.o: @@ -2930,8 +2920,6 @@ $(OBJDIR)/$(CONFIG)/src/core/surface/event_string.o: $(OBJDIR)/$(CONFIG)/src/core/surface/init.o: $(OBJDIR)/$(CONFIG)/src/core/surface/lame_client.o: $(OBJDIR)/$(CONFIG)/src/core/surface/metadata_array.o: -$(OBJDIR)/$(CONFIG)/src/core/surface/secure_channel_create.o: -$(OBJDIR)/$(CONFIG)/src/core/surface/secure_server_create.o: $(OBJDIR)/$(CONFIG)/src/core/surface/server.o: $(OBJDIR)/$(CONFIG)/src/core/surface/server_chttp2.o: $(OBJDIR)/$(CONFIG)/src/core/surface/server_create.o: @@ -3067,18 +3055,18 @@ endif ifeq ($(SYSTEM),MINGW32) -$(LIBDIR)/$(CONFIG)/grpc++.$(SHARED_EXT): $(LIBGRPC++_OBJS) $(ZLIB_DEP)$(LIBDIR)/$(CONFIG)/grpc.$(SHARED_EXT) $(OPENSSL_DEP) +$(LIBDIR)/$(CONFIG)/grpc++.$(SHARED_EXT): $(LIBGRPC++_OBJS) $(ZLIB_DEP)$(LIBDIR)/$(CONFIG)/gpr.$(SHARED_EXT)$(LIBDIR)/$(CONFIG)/grpc.$(SHARED_EXT) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` - $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++.def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++-imp.a -o $(LIBDIR)/$(CONFIG)/grpc++.$(SHARED_EXT) $(LIBGRPC++_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgrpc-imp + $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++.def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++-imp.a -o $(LIBDIR)/$(CONFIG)/grpc++.$(SHARED_EXT) $(LIBGRPC++_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr-imp -lgrpc-imp else -$(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT): $(LIBGRPC++_OBJS) $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT) $(OPENSSL_DEP) +$(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT): $(LIBGRPC++_OBJS) $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT) $(OPENSSL_DEP) $(E) "[LD] Linking $@" $(Q) mkdir -p `dirname $@` ifeq ($(SYSTEM),Darwin) - $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT) $(LIBGRPC++_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgrpc + $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT) $(LIBGRPC++_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr -lgrpc else - $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++.so.0 -o $(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT) $(LIBGRPC++_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) -lgrpc + $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++.so.0 -o $(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT) $(LIBGRPC++_OBJS) $(LDLIBS) $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr -lgrpc $(Q) ln -sf libgrpc++.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc++.so.0 $(Q) ln -sf libgrpc++.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc++.so endif diff --git a/build.json b/build.json index 6e52d0b6d8..1822488c0e 100644 --- a/build.json +++ b/build.json @@ -32,10 +32,6 @@ "src/core/channel/noop_filter.h", "src/core/compression/algorithm.h", "src/core/compression/message_compress.h", - "src/core/httpcli/format_request.h", - "src/core/httpcli/httpcli.h", - "src/core/httpcli/httpcli_security_context.h", - "src/core/httpcli/parser.h", "src/core/iomgr/alarm.h", "src/core/iomgr/alarm_heap.h", "src/core/iomgr/alarm_internal.h", @@ -124,10 +120,6 @@ "src/core/channel/noop_filter.c", "src/core/compression/algorithm.c", "src/core/compression/message_compress.c", - "src/core/httpcli/format_request.c", - "src/core/httpcli/httpcli.c", - "src/core/httpcli/httpcli_security_context.c", - "src/core/httpcli/parser.c", "src/core/iomgr/alarm.c", "src/core/iomgr/alarm_heap.c", "src/core/iomgr/endpoint.c", @@ -182,8 +174,6 @@ "src/core/surface/init.c", "src/core/surface/lame_client.c", "src/core/surface/metadata_array.c", - "src/core/surface/secure_channel_create.c", - "src/core/surface/secure_server_create.c", "src/core/surface/server.c", "src/core/surface/server_chttp2.c", "src/core/surface/server_create.c", @@ -304,6 +294,10 @@ "include/grpc/grpc_security.h" ], "headers": [ + "src/core/httpcli/format_request.h", + "src/core/httpcli/httpcli.h", + "src/core/httpcli/httpcli_security_context.h", + "src/core/httpcli/parser.h", "src/core/security/auth.h", "src/core/security/base64.h", "src/core/security/credentials.h", @@ -316,6 +310,10 @@ "src/core/tsi/transport_security_interface.h" ], "src": [ + "src/core/httpcli/format_request.c", + "src/core/httpcli/httpcli.c", + "src/core/httpcli/httpcli_security_context.c", + "src/core/httpcli/parser.c", "src/core/security/auth.c", "src/core/security/base64.c", "src/core/security/credentials.c", @@ -325,6 +323,8 @@ "src/core/security/secure_transport_setup.c", "src/core/security/security_context.c", "src/core/security/server_secure_chttp2.c", + "src/core/surface/secure_channel_create.c", + "src/core/surface/secure_server_create.c", "src/core/tsi/fake_transport_security.c", "src/core/tsi/ssl_transport_security.c", "src/core/tsi/transport_security.c" @@ -431,6 +431,7 @@ "src/cpp/util/time.cc" ], "deps": [ + "gpr", "grpc" ], "secure": true, diff --git a/templates/Makefile.template b/templates/Makefile.template index 3cc1a95192..85da0dd892 100644 --- a/templates/Makefile.template +++ b/templates/Makefile.template @@ -971,6 +971,9 @@ endif common = common + ' $(LDLIBS_SECURE) $(OPENSSL_MERGE_LIBS)' lib_deps = lib_deps + ' $(OPENSSL_DEP)' mingw_lib_deps = mingw_lib_deps + ' $(OPENSSL_DEP)' + + if lib.language == 'c++': + common = common + ' $(LDLIBSXX) $(LDLIBS_PROTOBUF)' %> % if lib.build == "all": diff --git a/vsprojects/vs2013/grpc.vcxproj b/vsprojects/vs2013/grpc.vcxproj index f51122d1b1..36eade99de 100644 --- a/vsprojects/vs2013/grpc.vcxproj +++ b/vsprojects/vs2013/grpc.vcxproj @@ -85,6 +85,10 @@ + + + + @@ -109,10 +113,6 @@ - - - - @@ -186,6 +186,14 @@ + + + + + + + + @@ -204,6 +212,10 @@ + + + + @@ -240,14 +252,6 @@ - - - - - - - - @@ -356,10 +360,6 @@ - - - - diff --git a/vsprojects/vs2013/grpc.vcxproj.filters b/vsprojects/vs2013/grpc.vcxproj.filters index 9aed667051..cae1c20f2f 100644 --- a/vsprojects/vs2013/grpc.vcxproj.filters +++ b/vsprojects/vs2013/grpc.vcxproj.filters @@ -1,6 +1,18 @@ + + src\core\httpcli + + + src\core\httpcli + + + src\core\httpcli + + + src\core\httpcli + src\core\security @@ -28,6 +40,12 @@ src\core\security + + src\core\surface + + + src\core\surface + src\core\tsi @@ -82,18 +100,6 @@ src\core\compression - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - src\core\iomgr @@ -256,12 +262,6 @@ src\core\surface - - src\core\surface - - - src\core\surface - src\core\surface @@ -350,6 +350,18 @@ + + src\core\httpcli + + + src\core\httpcli + + + src\core\httpcli + + + src\core\httpcli + src\core\security @@ -422,18 +434,6 @@ src\core\compression - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - src\core\iomgr diff --git a/vsprojects/vs2013/grpc_shared.vcxproj b/vsprojects/vs2013/grpc_shared.vcxproj index 58022a33d5..85fa8ec9f0 100644 --- a/vsprojects/vs2013/grpc_shared.vcxproj +++ b/vsprojects/vs2013/grpc_shared.vcxproj @@ -89,6 +89,10 @@ + + + + @@ -113,10 +117,6 @@ - - - - @@ -190,6 +190,14 @@ + + + + + + + + @@ -208,6 +216,10 @@ + + + + @@ -244,14 +256,6 @@ - - - - - - - - @@ -360,10 +364,6 @@ - - - - diff --git a/vsprojects/vs2013/grpc_shared.vcxproj.filters b/vsprojects/vs2013/grpc_shared.vcxproj.filters index 9aed667051..cae1c20f2f 100644 --- a/vsprojects/vs2013/grpc_shared.vcxproj.filters +++ b/vsprojects/vs2013/grpc_shared.vcxproj.filters @@ -1,6 +1,18 @@ + + src\core\httpcli + + + src\core\httpcli + + + src\core\httpcli + + + src\core\httpcli + src\core\security @@ -28,6 +40,12 @@ src\core\security + + src\core\surface + + + src\core\surface + src\core\tsi @@ -82,18 +100,6 @@ src\core\compression - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - src\core\iomgr @@ -256,12 +262,6 @@ src\core\surface - - src\core\surface - - - src\core\surface - src\core\surface @@ -350,6 +350,18 @@ + + src\core\httpcli + + + src\core\httpcli + + + src\core\httpcli + + + src\core\httpcli + src\core\security @@ -422,18 +434,6 @@ src\core\compression - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - src\core\iomgr diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj b/vsprojects/vs2013/grpc_unsecure.vcxproj index 8b3b853cce..1eebb42b30 100644 --- a/vsprojects/vs2013/grpc_unsecure.vcxproj +++ b/vsprojects/vs2013/grpc_unsecure.vcxproj @@ -98,10 +98,6 @@ - - - - @@ -205,14 +201,6 @@ - - - - - - - - @@ -321,10 +309,6 @@ - - - - diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters index 6fac846422..7e97f48318 100644 --- a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters @@ -46,18 +46,6 @@ src\core\compression - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - src\core\iomgr @@ -220,12 +208,6 @@ src\core\surface - - src\core\surface - - - src\core\surface - src\core\surface @@ -353,18 +335,6 @@ src\core\compression - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - - - src\core\httpcli - src\core\iomgr @@ -599,9 +569,6 @@ {2e3aca1d-223d-10a1-b282-7f9fc68ee6f5} - - {1ba3a245-47e7-89b5-b0c9-aca758bd0277} - {a9df8b24-ecea-ff6d-8999-d8fa54cd70bf} -- cgit v1.2.3