]> granicus.if.org Git - icu/commitdiff
ICU-20322 On MinGW, move the DLLs to the "bin" directory.
authorJeff Genovy <29107334+jefgen@users.noreply.github.com>
Tue, 7 Jan 2020 09:38:21 +0000 (01:38 -0800)
committerJeff Genovy <29107334+jefgen@users.noreply.github.com>
Wed, 12 Feb 2020 22:19:15 +0000 (14:19 -0800)
This change builds on Vincent Torri's changes.

This installs the ICU DLL files in $prefix/bin instead of $prefix/lib.

Note: In order to disable this change in behavior you can edit
the "mh-mingw*" file(s). If you set the variable MINGW_MOVEDLLSTOBINDIR
to NO instead of YES, then it will retain the previous behavior of
installing the DLLs into the bin folder.

13 files changed:
icu4c/source/common/Makefile.in
icu4c/source/config/icu-config-bottom
icu4c/source/config/mh-mingw
icu4c/source/config/mh-mingw64
icu4c/source/data/Makefile.in
icu4c/source/i18n/Makefile.in
icu4c/source/icudefs.mk.in
icu4c/source/io/Makefile.in
icu4c/source/layoutex/Makefile.in
icu4c/source/stubdata/Makefile.in
icu4c/source/tools/ctestfw/Makefile.in
icu4c/source/tools/genren/Makefile
icu4c/source/tools/toolutil/Makefile.in

index 9e7fa22088a41c49809bdb8b172088bc40cf0542..7d149eba6ac6f3d32e85947d2523149a6e3cb3b4 100644 (file)
@@ -12,7 +12,6 @@
 ## Source directory information
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
-platform = @platform@
 
 top_builddir = ..
 
@@ -160,8 +159,9 @@ ifneq ($(ENABLE_STATIC),)
        $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
 endif
 ifneq ($(ENABLE_SHARED),)
-ifeq ($(platform), U_MINGW)
-       @$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+       $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
 else
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
index 20d0cdd8b6400cf956cdaba849d07dab8975ffe9..ddba5b3f1fe6013cb12ee4a5893cea097293239e 100644 (file)
@@ -5,7 +5,13 @@
 ## Copyright (c) 2002-2013, International Business Machines Corporation and
 ## others. All Rights Reserved.
 
-ICUUC_FILE="${libdir}/${ICULIBS_COMMON_LIB_NAME}"
+# For MinGW do we want the common DLL to go into the bin location?
+if [ "$MINGW_MOVEDLLSTOBINDIR" = "YES" ]; then
+       ICUUC_FILE="${bindir}/${ICULIBS_COMMON_LIB_NAME}"
+else
+       ICUUC_FILE="${libdir}/${ICULIBS_COMMON_LIB_NAME}"
+fi
+
 ICUUC_FILE_A="${libdir}/${ICULIBS_COMMON_LIB_NAME_A}"
 
 #  echo ENABLE RPATH $ENABLE_RPATH and RPATHLDFLAGS=${RPATH_LDFLAGS}
index 7dac12fd6401dce551926b52693127a8cb3ff3b9..2a87919ce3879438e0b020703c7b025cf46e75f9 100644 (file)
 # This file is similar to mh-mingw64
 # Any changes made here may also need to be made in mh-mingw64
 
+# On Windows we generally have the DLLs in the bin directory rather than the lib directory.
+# This setting moves the ICU DLLs into the bin folder for MinGW/MSYS2 when "make install" is run.
+# If you prefer to have the DLLs in the lib folder, then set this to NO instead.
+MINGW_MOVEDLLSTOBINDIR = YES
+
 # We install sbin tools into the same bin directory because
 # pkgdata needs some of the tools in sbin, and we can't always depend on
 # icu-config working on Windows.
@@ -163,8 +168,6 @@ MIDDLE_IMPORT_LIB = $(FINAL_IMPORT_LIB)#M#
 
 ## Special pkgdata information that is needed
 PKGDATA_VERSIONING = -r $(SO_TARGET_VERSION_MAJOR)
-#ICUPKGDATA_INSTALL_DIR = $(shell cygpath -dma $(DESTDIR)$(ICUPKGDATA_DIR))#M#
-#ICUPKGDATA_INSTALL_LIBDIR = $(shell cygpath -dma $(DESTDIR)$(libdir))#M#
 
 ## Versioned libraries rules
 #%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
index 456997a5e949f8da2bc5d0cfe70137f021d1a82b..5f3c2827b0d9672d8b65b7c20d63428f5ce114cf 100644 (file)
@@ -7,6 +7,11 @@
 
 # TODO: Finish the rest of this port. This platform port is incomplete.
 
+# On Windows we generally have the DLLs in the bin directory rather than the lib directory.
+# This setting moves the ICU DLLs into the bin folder for MinGW/MSYS2 when "make install" is run.
+# If you prefer to have the DLLs in the lib folder, then set this to NO instead.
+MINGW_MOVEDLLSTOBINDIR = YES
+
 # This file is similar to mh-mingw
 # Any changes made here may also need to be made in mh-mingw
 
@@ -163,8 +168,6 @@ MIDDLE_IMPORT_LIB = $(FINAL_IMPORT_LIB)#M#
 
 ## Special pkgdata information that is needed
 PKGDATA_VERSIONING = -r $(SO_TARGET_VERSION_MAJOR)
-#ICUPKGDATA_INSTALL_DIR = $(shell cygpath -dma $(DESTDIR)$(ICUPKGDATA_DIR))#M#
-#ICUPKGDATA_INSTALL_LIBDIR = $(shell cygpath -dma $(DESTDIR)$(libdir))#M#
 
 ## Versioned libraries rules
 #%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
index e817ba40a7218e8bad25d1f65ce11e18dc453fd0..cf2c74dccfb97210ca692cba22a122e4b21c131a 100644 (file)
@@ -195,11 +195,21 @@ ifeq ($(PKGDATA_MODE),files)
 endif
 ifneq ($(ENABLE_STATIC),)
 ifeq ($(PKGDATA_MODE),dll)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+       $(PKGDATA_INVOKE) $(PKGDATA) -m static -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) $(PKGDATA_LIST) -I $(DESTDIR)$(bindir)
+else
        $(PKGDATA_INVOKE) $(PKGDATA) -m static -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBSTATICNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_LIBDIR)
 endif
 endif
+endif
 ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+       $(PKGDATA_INVOKE) $(PKGDATA) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBNAME) $(PKGDATA_LIST) -I $(DESTDIR)$(bindir)
+else
        $(PKGDATA_INVOKE) $(PKGDATA) -m $(PKGDATA_MODE) $(PKGDATA_VERSIONING) -e $(ICUDATA_ENTRY_POINT) -T $(OUTTMPDIR) -s $(BUILDDIR) -p $(ICUDATA_NAME) $(PKGDATA_LIBNAME) $(PKGDATA_LIST) -I $(ICUPKGDATA_INSTALL_DIR)
+endif
 else
        $(INSTALL_DATA) $(ICUDATA_SOURCE_ARCHIVE) $(DESTDIR)$(ICUPKGDATA_DIR)
 endif
index 2f27261538b7af62da579cecccbe480a8bfdee97..b72f79b67137681366f48108e428464cb7a7e6d5 100644 (file)
@@ -12,7 +12,6 @@
 ## Source directory information
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
-platform = @platform@
 
 top_builddir = ..
 
@@ -154,8 +153,9 @@ ifneq ($(ENABLE_STATIC),)
        $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
 endif
 ifneq ($(ENABLE_SHARED),)
-ifeq ($(platform), U_MINGW)
-       @$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+       $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
 else
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
index 59d82052fc9d17ffe115c44a9c6038d76058c255..24bd97a4dcdc5845a01f65bc67e2cf4c0f1a2b60 100644 (file)
@@ -240,6 +240,10 @@ LIBDIR=$(top_builddir)/lib
 # Location of the executables before "make install" is used
 BINDIR=$(top_builddir)/bin
 
+# Defined here so that it can be overriden by mh-mingw*.
+# For MinGW/MSYS2 we want the DLLs to go into the bin location.
+MINGW_MOVEDLLSTOBINDIR = NO
+
 # overridden by icucross.mk
 TOOLBINDIR=$(BINDIR)
 TOOLLIBDIR=$(LIBDIR)
index a8629fddc2a7b506be9768cd2b7b39638c5fb2fc..ef2c2a6175704253d4747988cad1f73667be6d22 100644 (file)
@@ -12,7 +12,6 @@
 ## Source directory information
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
-platform = @platform@
 
 top_builddir = ..
 
@@ -102,8 +101,9 @@ ifneq ($(ENABLE_STATIC),)
        $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
 endif
 ifneq ($(ENABLE_SHARED),)
-ifeq ($(platform), U_MINGW)
-       @$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+       $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
 else
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
index b9cabac256dde2d84b169a4ef707c004c0a0fa04..d456ef40f0519db2f552810a2f6be940a38629fb 100644 (file)
@@ -114,6 +114,11 @@ ifneq ($(ENABLE_STATIC),)
        $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
 endif
 ifneq ($(ENABLE_SHARED),)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+       $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+       $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
+else
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
 ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
        cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
@@ -121,6 +126,7 @@ ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
        cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
 endif
 endif
+endif
 ifneq ($(IMPORT_LIB_EXT),)
        $(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
 ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
index 03c7adee687865864f6ad237afe4964f7466131d..162c63a7c07e62976971ab26a68b91bbe0092f60 100644 (file)
@@ -12,7 +12,6 @@
 ## Source directory information
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
-platform = @platform@
 
 top_builddir = ..
 
@@ -88,8 +87,9 @@ ifneq ($(ENABLE_STATIC),)
        $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
 endif
 ifneq ($(ENABLE_SHARED),)
-ifeq ($(platform), U_MINGW)
-       @$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+       $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
 else
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
index 50aae1399d1901e7d9ac007f907b35eadf125735..845fdc9d3291bcdedccacd5bb7c88fbb8e3c26bd 100644 (file)
@@ -12,7 +12,6 @@
 ## Source directory information
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
-platform = @platform@
 
 top_builddir = ../..
 
@@ -84,8 +83,9 @@ ifneq ($(ENABLE_STATIC),)
        $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
 endif
 ifneq ($(ENABLE_SHARED),)
-ifeq ($(platform), U_MINGW)
-       @$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+       $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
 else
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
index 082c74fab17e3f34c658af236ba22bcfce5d563e..f0ab66699964d855ca3dc18ed9acdae206d00efa 100644 (file)
@@ -32,11 +32,18 @@ ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
 include $(BUILDDIR)/icudefs.mk
 endif
 
-COM=$(ICUDIR)/lib/libicuuc.$(SO)
-I18=$(ICUDIR)/lib/libicui18n.$(SO)
-LEX=$(ICUDIR)/lib/libiculx.$(SO)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+installdir = bin
+else
+installdir = lib
+endif
+
+COM=$(ICUDIR)/$(installdir)/libicuuc.$(SO)
+I18=$(ICUDIR)/$(installdir)/libicui18n.$(SO)
+LEX=$(ICUDIR)/$(installdir)/libiculx.$(SO)
 DAT=$(ICUDIR)/stubdata/libicudata.$(SO)
-UIO=$(ICUDIR)/lib/libicuio.$(SO)
+UIO=$(ICUDIR)/$(installdir)/libicuio.$(SO)
 
 LIBS=$(COM) $(I18) $(LEX) $(UIO)
 
index 923be3cd37b6cf886cb3424cfea2e7d73e203fa9..0a6dc7ddf33ae5bfd5811eef89975c0fc218cf3d 100644 (file)
@@ -12,7 +12,6 @@
 ## Source directory information
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
-platform = @platform@
 
 top_builddir = ../..
 
@@ -95,8 +94,9 @@ ifneq ($(ENABLE_STATIC),)
        $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
 endif
 ifneq ($(ENABLE_SHARED),)
-ifeq ($(platform), U_MINGW)
-       @$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+# For MinGW, do we want the DLL to go in the bin location?
+ifeq ($(MINGW_MOVEDLLSTOBINDIR),YES)
+       $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(bindir)
 else
        $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)