diff --git a/contribs/pmi2/Makefile.am b/contribs/pmi2/Makefile.am
index 89dc14ecef6e4ed69fc2e276eaaa6e5d4e61ed3e..8ebff5144e05285c315a2c3ff42972f8d4842c4d 100644
--- a/contribs/pmi2/Makefile.am
+++ b/contribs/pmi2/Makefile.am
@@ -5,10 +5,33 @@ AUTOMAKE_OPTIONS = foreign
 
 pkginclude_HEADERS = slurm/pmi2.h
 
-PLUGIN_FLAGS = -module -avoid-version --export-dynamic
+if WITH_GNU_LD
+PMI2_VERSION_SCRIPT = \
+        pmi2_version.map
+PMI2_OTHER_FLAGS = \
+        -Wl,--version-script=$(PMI2_VERSION_SCRIPT)
+endif
 
+libpmi2_current = 0
+libpmi2_age     = 0
+libpmi2_rev     = 0
+
+BUILT_SOURCES = $(PMI2_VERSION_SCRIPT)
 lib_LTLIBRARIES = libpmi2.la
 
-libpmi2_la_SOURCES = pmi2_api.c  pmi2_util.c slurm/pmi2.h
-libpmi2_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
+libpmi2_la_SOURCES =  pmi2_api.c  pmi2_util.c slurm/pmi2.h
+libpmi2_la_LDFLAGS = $(LIB_LDFLAGS) -version-info $(libpmi2_current):$(libpmi2_rev):$(libpmi2_age) \
+	$(PMI2_OTHER_FLAGS)
+
+$(PMI2_VERSION_SCRIPT) :
+	(echo "{ global:"; \
+	echo "   PMI2_*;"; \
+	echo "  local: *;"; \
+	echo "};") > $(PMI2_VERSION_SCRIPT)
+
+CLEANFILES = \
+	$(PMI_VERSION_SCRIPT)
+
+DISTCLEANFILES = \
+	$(PMI_VERSION_SCRIPT)
 
diff --git a/contribs/pmi2/Makefile.in b/contribs/pmi2/Makefile.in
index e01d538d699ae81f4ef7c0d83075f0e502578811..2f5120a0bdbb17a5174450e066404ad08fdeeb25 100644
--- a/contribs/pmi2/Makefile.in
+++ b/contribs/pmi2/Makefile.in
@@ -397,11 +397,29 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = foreign
 pkginclude_HEADERS = slurm/pmi2.h
-PLUGIN_FLAGS = -module -avoid-version --export-dynamic
+@WITH_GNU_LD_TRUE@PMI2_VERSION_SCRIPT = \
+@WITH_GNU_LD_TRUE@        pmi2_version.map
+
+@WITH_GNU_LD_TRUE@PMI2_OTHER_FLAGS = \
+@WITH_GNU_LD_TRUE@        -Wl,--version-script=$(PMI2_VERSION_SCRIPT)
+
+libpmi2_current = 0
+libpmi2_age = 0
+libpmi2_rev = 0
+BUILT_SOURCES = $(PMI2_VERSION_SCRIPT)
 lib_LTLIBRARIES = libpmi2.la
 libpmi2_la_SOURCES = pmi2_api.c  pmi2_util.c slurm/pmi2.h
-libpmi2_la_LDFLAGS = $(SO_LDFLAGS) $(PLUGIN_FLAGS)
-all: all-am
+libpmi2_la_LDFLAGS = $(LIB_LDFLAGS) -version-info $(libpmi2_current):$(libpmi2_rev):$(libpmi2_age) \
+	$(PMI2_OTHER_FLAGS)
+
+CLEANFILES = \
+	$(PMI_VERSION_SCRIPT)
+
+DISTCLEANFILES = \
+	$(PMI_VERSION_SCRIPT)
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
@@ -610,13 +628,15 @@ distdir: $(DISTFILES)
 	  fi; \
 	done
 check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
 all-am: Makefile $(LTLIBRARIES) $(HEADERS)
 installdirs:
 	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
-install: install-am
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
 install-exec: install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
@@ -638,14 +658,17 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 clean: clean-am
 
 clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
@@ -717,7 +740,7 @@ ps-am:
 
 uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS
 
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
 	clean-libLTLIBRARIES clean-libtool ctags distclean \
@@ -735,6 +758,12 @@ uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS
 	uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS
 
 
+$(PMI2_VERSION_SCRIPT) :
+	(echo "{ global:"; \
+	echo "   PMI2_*;"; \
+	echo "  local: *;"; \
+	echo "};") > $(PMI2_VERSION_SCRIPT)
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT: