Skip to content

Commit

Permalink
feat(debug): improved debug messages
Browse files Browse the repository at this point in the history
  • Loading branch information
RufusJWB committed Aug 15, 2024
1 parent 8f4b90e commit 252555a
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 65 deletions.
31 changes: 20 additions & 11 deletions OpenSSL_version.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,28 +14,37 @@
#include <openssl/crypto.h>

#if OPENSSL_VERSION_NUMBER < 0x10002000L
#error Should not use OpenSSL versions older than 1.0.2. They are unsupported and insecure.
#error Should not use OpenSSL versions older than 1.0.2. They are unsupported and insecure.
#endif

#if OPENSSL_VERSION_NUMBER < 0x10100000L
#define OpenSSL_version_num SSLeay
#define OpenSSL_version_num SSLeay
#define DEBUG_MESSAGE "[DEBUG] Using SSLeay for OpenSSL version\n"
#elif OPENSSL_VERSION_NUMBER >= 0x30000000L
#define OpenSSL_version_num() ((unsigned long) \
((OPENSSL_version_major()<<28) \
|(OPENSSL_version_minor()<<20) \
|(OPENSSL_version_patch()<< 4) \
|_OPENSSL_VERSION_PRE_RELEASE ))
#define OpenSSL_version_num() ((unsigned long) \
((OPENSSL_version_major()<<28) \
|(OPENSSL_version_minor()<<20) \
|(OPENSSL_version_patch()<< 4) \
|_OPENSSL_VERSION_PRE_RELEASE ))
#define DEBUG_MESSAGE "[DEBUG] Using OpenSSL_version_num() for OpenSSL version\n"
#endif

int main(int argc, char *argv[])
{
fprintf(stdout, DEBUG_MESSAGE);

fprintf(stdout, "[DEBUG] Starting OpenSSL version check\n");
fprintf(stdout, "[DEBUG] OPENSSL_VERSION_NUMBER: 0x%lx\n", (unsigned long)OPENSSL_VERSION_NUMBER);

unsigned long runtime_version = OpenSSL_version_num();
fprintf(stdout, "[DEBUG] runtime_version: 0x%lx\n", runtime_version);

#define MAJOR_MINOR_MASK 0xfff00000L
if ((MAJOR_MINOR_MASK & runtime_version ) !=
(MAJOR_MINOR_MASK & OPENSSL_VERSION_NUMBER)) {
fprintf(stderr, "OpenSSL runtime version 0x%lx does not match version 0x%lx used by compiler\n",
runtime_version, (unsigned long)OPENSSL_VERSION_NUMBER);
if ((MAJOR_MINOR_MASK & runtime_version ) != (MAJOR_MINOR_MASK & OPENSSL_VERSION_NUMBER)) {
fprintf(stderr, "OpenSSL runtime version 0x%lx does not match version 0x%lx used by compiler\n", runtime_version, (unsigned long)OPENSSL_VERSION_NUMBER);
return EXIT_FAILURE;
}

fprintf(stdout, "%s (0x%lx)\n", OPENSSL_VERSION_TEXT, runtime_version);
return EXIT_SUCCESS;
}
135 changes: 81 additions & 54 deletions OpenSSL_version.mk
Original file line number Diff line number Diff line change
@@ -1,80 +1,107 @@
ifeq ($(LIB),)
$(info [DEBUG] LIB is not set)


ifeq ($(OS),Windows_NT)
EXE=.exe
LIB=bin
else
EXE=
LIB=lib
ifeq ($(shell uname -s),Darwin)
OS=MacOS
endif
endif

#CC=gcc
ifneq ($(OPENSSL_DIR),)
ifeq ($(shell echo $(OPENSSL_DIR) | grep "^/"),)
# $(OPENSSL_DIR) is relative path
OPENSSL_LIB=$(OPENSSL_DIR)
ifeq ($(OS),Windows_NT)
$(info [DEBUG] OS is Windows_NT)
EXE = .exe
LIB = bin
else
# $(OPENSSL_DIR) is absolute path
OPENSSL_LIB=$(OPENSSL_DIR)/$(LIB)
$(info [DEBUG] OS is not Windows_NT)
EXE =
LIB = lib
ifeq ($(shell uname -s),Darwin)
$(info [DEBUG] OS is Darwin (MacOS))
OS = MacOS
endif
$(info [TRACE] After Darwin check: OS=$(OS))
endif
$(info [TRACE] After OS check: EXE=$(EXE), LIB=$(LIB))

# CC = gcc
ifneq ($(OPENSSL_DIR),)
$(info [DEBUG] OPENSSL_DIR is set)
ifeq ($(shell echo $(OPENSSL_DIR) | grep "^/"),)
$(info [DEBUG] OPENSSL_DIR is a relative path)
# $(OPENSSL_DIR) is relative path
OPENSSL_LIB = $(OPENSSL_DIR)
else
$(info [DEBUG] OPENSSL_DIR is an absolute path)
# $(OPENSSL_DIR) is absolute path
OPENSSL_LIB = $(OPENSSL_DIR)/$(LIB)
endif
$(info [TRACE] After OPENSSL_DIR check: OPENSSL_LIB=$(OPENSSL_LIB))
CFLAGS += -isystem $(OPENSSL_DIR)/include
LDFLAGS += -L$(OPENSSL_DIR) -L$(OPENSSL_LIB) -Wl,-rpath=$(OPENSSL_DIR) -Wl,-rpath=$(OPENSSL_LIB)
endif
CFLAGS+=-isystem $(OPENSSL_DIR)/include
LDFLAGS+=-L$(OPENSSL_DIR) -L$(OPENSSL_LIB) -Wl,-rpath=$(OPENSSL_DIR) -Wl,-rpath=$(OPENSSL_LIB)
endif
LDLIBS=-lcrypto

LDLIBS = -lcrypto

.phony: default build show clean
$(info [TRACE] After OPENSSL_DIR set: EXE=$(EXE))
$(info [TRACE] After OPENSSL_DIR set: LIB=$(LIB))
$(info [TRACE] After OPENSSL_DIR set: OPENSSL_LIB=$(OPENSSL_LIB))
$(info [TRACE] After OPENSSL_DIR set: CFLAGS=$(CFLAGS))
$(info [TRACE] After OPENSSL_DIR set: LDFLAGS=$(LDFLAGS))
$(info [TRACE] After OPENSSL_DIR set: LDLIBS=$(LDLIBS))

default: build show clean
.PHONY: default build show clean

build: OpenSSL_version
default: build show clean

show: build
build: OpenSSL_version

show: build
@./OpenSSL_version$(EXE)

clean:
clean:
@rm -f OpenSSL_version$(EXE)


else ifeq ($(LIB),header)
$(info [DEBUG] LIB is set to header)

OPENSSL_NUMBER_SEL = head -n 1 | sed -r 's/.*OpenSSL //' | awk '{print ($$0+0)}'
OPENSSLV_H = $(OPENSSL_DIR)/include/openssl/opensslv.h
ifeq ($(shell fgrep OPENSSL_VERSION_MAJOR "$(OPENSSLV_H)"),)
$(info [DEBUG] OPENSSL_VERSION_MAJOR not found in OPENSSLV_H)
OPENSSL_VERSION = $(shell grep 'OPENSSL_VERSION_TEXT\s* "OpenSSL ' "$(OPENSSLV_H)" | $(OPENSSL_NUMBER_SEL))
else
$(info [DEBUG] OPENSSL_VERSION_MAJOR found in OPENSSLV_H)
ifeq ($(OS),MacOS)
$(info [DEBUG] OS is MacOS)
OPENSSL_VERSION = $(shell fgrep OPENSSL_VERSION_M "$(OPENSSLV_H)" | head -n 2 | awk -v RS="" '{print $4"."$8 }')
else
$(info [DEBUG] OS is not MacOS)
OPENSSL_VERSION = $(shell fgrep OPENSSL_VERSION_M "$(OPENSSLV_H)" | head -n 2 | awk -v RS="" '{print $$4"."$$8 }')
endif
$(info [TRACE] After OS check in header: OPENSSL_VERSION=$(OPENSSL_VERSION))
endif

OPENSSL_NUMBER_SEL=head -n 1 | sed -r 's/.*OpenSSL //' | awk '{print ($$0+0)}'
OPENSSLV_H=$(OPENSSL_DIR)/include/openssl/opensslv.h
ifeq ($(shell fgrep OPENSSL_VERSION_MAJOR "$(OPENSSLV_H)"),)
OPENSSL_VERSION=$(shell grep 'OPENSSL_VERSION_TEXT\s* "OpenSSL ' "$(OPENSSLV_H)" | $(OPENSSL_NUMBER_SEL))
else
ifeq ($(OS),MacOS)
OPENSSL_VERSION=$(shell fgrep OPENSSL_VERSION_M "$(OPENSSLV_H)" | head -n 2 | awk -v RS="" '{print $4"."$8 }')
else
OPENSSL_VERSION=$(shell fgrep OPENSSL_VERSION_M "$(OPENSSLV_H)" | head -n 2 | awk -v RS="" '{print $$4"."$$8 }')
endif
endif

ifeq ($(OPENSSL_VERSION),1)
OPENSSL_VERSION=1.0
endif
ifeq ($(OPENSSL_VERSION),1)
$(info [DEBUG] OPENSSL_VERSION is 1)
OPENSSL_VERSION = 1.0
endif

$(info [TRACE] OPENSSL_NUMBER_SEL=$(OPENSSL_NUMBER_SEL))
$(info [TRACE] OPENSSLV_H=$(OPENSSLV_H))
$(info [TRACE] OPENSSL_VERSION=$(OPENSSL_VERSION))

else # $(LIB) is name of library file
$(info [DEBUG] LIB is set to a library file)

OPENSSL_VERSION = $(shell strings "$(LIB)" | grep -E 'OpenSSL [0-9]+\.[0-9]+\.' | head -n 1 | sed -r 's/.*OpenSSL //' | awk -v FS="." '{print $$1"."$$2}')
ifeq ($(OPENSSL_VERSION),)
$(info [DEBUG] OPENSSL_VERSION not found in library file)
OPENSSL_VERSION = $(shell strings "$(LIB)" | grep -E 'libcrypto\.' | head -n 1 | sed -r 's/.*libcrypto(.[a-z]+)?\.//')
endif
ifeq ($(OPENSSL_VERSION),1.0.0)
$(info [DEBUG] OPENSSL_VERSION is 1.0.0)
OPENSSL_VERSION = 1.0
endif

OPENSSL_VERSION=$(shell strings "$(LIB)" | grep -E 'OpenSSL [0-9]+\.[0-9]+\.' | head -n 1 | sed -r 's/.*OpenSSL //' | awk -v FS="." '{print $$1"."$$2}')
ifeq ($(OPENSSL_VERSION),)
OPENSSL_VERSION=$(shell strings "$(LIB)" | grep -E 'libcrypto\.' | head -n 1 | sed -r 's/.*libcrypto(.[a-z]+)?\.//')
endif
ifeq ($(OPENSSL_VERSION),1.0.0)
OPENSSL_VERSION=1.0
endif

$(info [TRACE] OPENSSL_VERSION=$(OPENSSL_VERSION))

endif # $(LIB)


.phony: detect
.PHONY: detect

detect:
$(info $(OPENSSL_VERSION))

0 comments on commit 252555a

Please sign in to comment.