diff --git a/config/common_base b/config/common_base
index 0b09a9348..6292bc4af 100644
--- a/config/common_base
+++ b/config/common_base
@@ -1,6 +1,20 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2010-2017 Intel Corporation
 
+#
+# String that appears before the version number
+#
+CONFIG_RTE_VER_PREFIX="DPDK"
+
+#
+# Version information completed when this file is processed for a build
+#
+CONFIG_RTE_VER_YEAR=__YEAR
+CONFIG_RTE_VER_MONTH=__MONTH
+CONFIG_RTE_VER_MINOR=__MINOR
+CONFIG_RTE_VER_SUFFIX=__SUFFIX
+CONFIG_RTE_VER_RELEASE=__RELEASE
+
 #
 # define executive environment
 # RTE_EXEC_ENV values are the directories in mk/exec-env/
diff --git a/config/meson.build b/config/meson.build
index 999dea91e..30a7261a5 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -6,6 +6,22 @@
 pver = meson.project_version().split('.')
 major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))
 
+# extract all version information into the build configuration
+dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())
+dpdk_conf.set('RTE_VER_MONTH', pver.get(1).to_int())
+if pver.get(2).contains('-rc')
+	rc_ver = pver.get(2).split('-rc')
+	dpdk_conf.set('RTE_VER_MINOR', rc_ver.get(0).to_int())
+	dpdk_conf.set_quoted('RTE_VER_SUFFIX', '-rc')
+	dpdk_conf.set('RTE_VER_RELEASE', rc_ver.get(1).to_int())
+else
+	dpdk_conf.set('RTE_VER_MINOR', pver.get(2).to_int())
+	dpdk_conf.set_quoted('RTE_VER_SUFFIX', '')
+# for actual, non-rc releases, set the release value to 99 to ensure releases
+# have higher version numbers than their respective release candidates
+	dpdk_conf.set('RTE_VER_RELEASE', 99)
+endif
+
 pmd_subdir_opt = get_option('drivers_install_subdir')
 if pmd_subdir_opt.contains('<VERSION>')
 	pmd_subdir_opt = major_version.join(pmd_subdir_opt.split('<VERSION>'))
diff --git a/config/rte_config.h b/config/rte_config.h
index 1690f4d98..cda51af47 100644
--- a/config/rte_config.h
+++ b/config/rte_config.h
@@ -26,6 +26,9 @@
 #define RTE_EXEC_ENV_BSDAPP 1
 #endif
 
+/* String that appears before the version number */
+#define RTE_VER_PREFIX "DPDK"
+
 /****** library defines ********/
 
 /* compat defines */
diff --git a/lib/librte_eal/common/include/rte_version.h b/lib/librte_eal/common/include/rte_version.h
index a7eed7ab7..50867ea81 100644
--- a/lib/librte_eal/common/include/rte_version.h
+++ b/lib/librte_eal/common/include/rte_version.h
@@ -19,38 +19,6 @@ extern "C" {
 #include <stdio.h>
 #include <rte_common.h>
 
-/**
- * String that appears before the version number
- */
-#define RTE_VER_PREFIX "DPDK"
-
-/**
- * Major version/year number i.e. the yy in yy.mm.z
- */
-#define RTE_VER_YEAR 19
-
-/**
- * Minor version/month number i.e. the mm in yy.mm.z
- */
-#define RTE_VER_MONTH 5
-
-/**
- * Patch level number i.e. the z in yy.mm.z
- */
-#define RTE_VER_MINOR 0
-
-/**
- * Extra string to be appended to version number
- */
-#define RTE_VER_SUFFIX "-rc"
-
-/**
- * Patch release number
- *   0-15 = release candidates
- *   16   = release
- */
-#define RTE_VER_RELEASE 0
-
 /**
  * Macro to compute a version number usable for comparisons
  */
diff --git a/mk/rte.sdkconfig.mk b/mk/rte.sdkconfig.mk
index 46ec9e76d..f538649f2 100644
--- a/mk/rte.sdkconfig.mk
+++ b/mk/rte.sdkconfig.mk
@@ -74,9 +74,16 @@ else
 # To do so the temp config is checked for duplicate keys with cut/sort/uniq
 # Then for each of those identified duplicates as long as there are more than
 # just one left the last match is removed.
+# Part of the config includes the version information taken from "VERSION"
+# in the repo. This needs to be split into the various parts using sed and awk.
+# To ensure correct version comparison, we append ".99" to the version number
+# so that the version of a release is higher than that of its rc's.
 $(RTE_OUTPUT)/.config: $(RTE_CONFIG_TEMPLATE) FORCE | $(RTE_OUTPUT)
 	$(Q)if [ "$(RTE_CONFIG_TEMPLATE)" != "" -a -f "$(RTE_CONFIG_TEMPLATE)" ]; then \
 		$(CPP) -undef -P -x assembler-with-cpp \
+		`cat $(RTE_SRCDIR)/VERSION | \
+		sed -e 's/-rc/.-rc./' -e 's/$$/..99/' | \
+		awk -F '.' '{print "-D__YEAR="int($$1), "-D__MONTH="int($$2), "-D__MINOR="int($$3), "-D__SUFFIX=\""$$4"\"", "-D__RELEASE="int($$5)}'` \
 		-ffreestanding \
 		-o $(RTE_OUTPUT)/.config_tmp $(RTE_CONFIG_TEMPLATE) ; \
 		config=$$(cat $(RTE_OUTPUT)/.config_tmp) ; \
