Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions ports/gettext/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
all: build-gettext-runtime-intl build-gettext-runtime-po build-gettext-runtime-src
all: build-gettext-tools build-gettext-tools-gnulib build-gettext-tools-its build-gettext-tools-m4 build-gettext-tools-misc build-gettext-tools-po build-gettext-tools-projects build-gettext-tools-styles
all: build-libtextstyle

install: install-gettext-runtime-intl install-gettext-runtime-po install-gettext-runtime-src
install: install-gettext-tools install-gettext-tools-gnulib install-gettext-tools-its install-gettext-tools-m4 install-gettext-tools-misc install-gettext-tools-po install-gettext-tools-projects install-gettext-tools-styles
install: install-libtextstyle

build-gettext-runtime-gnulib: build-gettext-runtime-intl
$(MAKE) -C gettext-runtime/gnulib-lib all
build-gettext-runtime-intl:
$(MAKE) -C gettext-runtime/intl all
build-gettext-runtime-po:
$(MAKE) -C gettext-runtime/po all
build-gettext-runtime-src: build-gettext-runtime-intl build-gettext-runtime-gnulib
$(MAKE) -C gettext-runtime/src all
build-gettext-tools: build-gettext-runtime-intl build-libtextstyle build-gettext-tools-gnulib build-gettext-tools-intl build-gettext-tools-libgrep build-gnulib-local
$(MAKE) -C gettext-tools/src all
build-gettext-tools-gnulib: build-gettext-tools-intl
$(MAKE) -C gettext-tools/gnulib-lib all
build-gettext-tools-libgrep: build-gettext-tools-gnulib
$(MAKE) -C gettext-tools/libgrep all
build-gettext-tools-intl:
$(MAKE) -C gettext-tools/intl all
build-gettext-tools-its:
$(MAKE) -C gettext-tools/its all
build-gettext-tools-m4:
$(MAKE) -C gettext-tools/m4 all
build-gettext-tools-misc:
$(MAKE) -C gettext-tools/misc all
build-gettext-tools-po:
$(MAKE) -C gettext-tools/po all
build-gettext-tools-projects:
$(MAKE) -C gettext-tools/projects all
build-gettext-tools-styles:
$(MAKE) -C gettext-tools/styles all
build-gnulib-local:
$(MAKE) -C gnulib-local all
build-libtextstyle:
$(MAKE) -C libtextstyle/lib all

install-gettext-runtime-intl:
$(MAKE) -C gettext-runtime/intl install
install-gettext-runtime-po:
$(MAKE) -C gettext-runtime/po install
install-gettext-runtime-src:
$(MAKE) -C gettext-runtime/src install
install-gettext-tools:
$(MAKE) -C gettext-tools/src install
install-gettext-tools-gnulib:
$(MAKE) -C gettext-tools/gnulib-lib install
install-gettext-tools-its:
$(MAKE) -C gettext-tools/its install
install-gettext-tools-m4:
$(MAKE) -C gettext-tools/m4 install
install-gettext-tools-misc:
$(MAKE) -C gettext-tools/misc install
install-gettext-tools-po:
$(MAKE) -C gettext-tools/po install
install-gettext-tools-projects:
$(MAKE) -C gettext-tools/projects install
install-gettext-tools-styles:
$(MAKE) -C gettext-tools/styles install
install-libtextstyle:
$(MAKE) -C libtextstyle/lib install
163 changes: 113 additions & 50 deletions ports/gettext/portfile.cmake
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
if(VCPKG_TARGET_IS_LINUX)
set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
if (NOT EXISTS "/usr/include/libintl.h")
message(FATAL_ERROR "Please use command \"sudo apt-get install gettext\" to install gettext on linux.")
message(FATAL_ERROR "When targeting Linux, `libintl.h` is expected to come from the C Runtime Library (glibc). "
"Please use \"sudo apt-get install libc-dev\" or the equivalent to install development files."
)
endif()
if(NOT "tools" IN_LIST FEATURES)
set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
return()
endif()
return()
else()
set(VCPKG_POLICY_ALLOW_RESTRICTED_HEADERS enabled)
endif()

set(VCPKG_POLICY_ALLOW_RESTRICTED_HEADERS enabled)

#Based on https://github.com/winlibs/gettext

set(GETTEXT_VERSION 0.21)
Expand All @@ -17,13 +21,14 @@ vcpkg_download_distfile(ARCHIVE
FILENAME "gettext-${GETTEXT_VERSION}.tar.gz"
SHA512 bbe590c5dd3580c75bf30ff768da99a88eb8d466ec1ac9eea20be4cab4357ecf72448e6b81b47425e39d50fa6320ba426632914d7898dfebb4f159abc39c31d1
)
set(PATCHES "")
if(VCPKG_TARGET_IS_UWP)
set(PATCHES uwp_remove_localcharset.patch)
endif()
vcpkg_extract_source_archive_ex(
OUT_SOURCE_PATH SOURCE_PATH
ARCHIVE ${ARCHIVE}
REF ${GETTEXT_VERSION}
ARCHIVE "${ARCHIVE}"
REF "${GETTEXT_VERSION}"
PATCHES
0002-Fix-uwp-build.patch
0003-Fix-win-unicode-paths.patch
Expand All @@ -32,59 +37,117 @@ vcpkg_extract_source_archive_ex(
${PATCHES}
)
vcpkg_find_acquire_program(BISON)
get_filename_component(BISON_PATH ${BISON} DIRECTORY)
vcpkg_add_to_path(${BISON_PATH})
get_filename_component(BISON_PATH "${BISON}" DIRECTORY)
vcpkg_add_to_path("${BISON_PATH}")

set(OPTIONS
--enable-relocatable #symbol duplication with glib-init.c?
--enable-c++
--disable-acl
--disable-csharp
--disable-curses
--disable-java
--disable-openmp
)
if(VCPKG_TARGET_IS_WINDOWS)
# This is required. For some reason these do not get correctly identified for release builds.
list(APPEND OPTIONS ac_cv_func_wcslen=yes
ac_cv_func_memmove=yes
#The following are required for a full gettext built.
# Left here for future reference.
gl_cv_func_printf_directive_n=no #segfaults otherwise with popup window
ac_cv_func_memset=yes #not detected in release builds
ac_cv_header_pthread_h=no
ac_cv_header_dirent_h=no
)
list(APPEND OPTIONS
# Avoid unnecessary test.
--with-included-glib
# This is required. For some reason these do not get correctly identified for release builds.
ac_cv_func_wcslen=yes
ac_cv_func_memmove=yes
# The following are required for a full gettext built (libintl and tools).
gl_cv_func_printf_directive_n=no # segfaults otherwise with popup window
ac_cv_func_memset=yes # not detected in release builds
ac_cv_header_pthread_h=no
ac_cv_header_dirent_h=no
)
endif()
set(ADDITIONAL_CONFIGURE_OPTIONS)
set(ADDITIONAL_INSTALL_OPTIONS)

# These functions scope any changes to VCPKG_BUILD_TYPE
function(build_libintl_and_tools)
cmake_parse_arguments(arg "" "BUILD_TYPE" "" ${ARGN})
if(DEFINED arg_BUILD_TYPE)
set(VCPKG_BUILD_TYPE "${arg_BUILD_TYPE}")
endif()
vcpkg_configure_make(SOURCE_PATH "${SOURCE_PATH}"
DETERMINE_BUILD_TRIPLET
USE_WRAPPERS
ADD_BIN_TO_PATH # So configure can check for working iconv
ADDITIONAL_MSYS_PACKAGES gzip
OPTIONS
${OPTIONS}
)
vcpkg_install_make(MAKEFILE "${CMAKE_CURRENT_LIST_DIR}/Makefile")
endfunction()

function(build_libintl_only)
cmake_parse_arguments(arg "" "BUILD_TYPE" "" ${ARGN})
if(DEFINED arg_BUILD_TYPE)
set(VCPKG_BUILD_TYPE "${arg_BUILD_TYPE}")
endif()
vcpkg_configure_make(SOURCE_PATH "${SOURCE_PATH}/gettext-runtime"
DETERMINE_BUILD_TRIPLET
USE_WRAPPERS
ADD_BIN_TO_PATH # So configure can check for working iconv
OPTIONS
${OPTIONS}
)
vcpkg_install_make(SUBPATH "/intl")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you need to use this? Can we manually set the target intl instead of doing this?
If the intl's makefile is generated, then it should be related to the target in the makefile in the root directory.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you need to use this? Can we manually set the target intl instead of doing this?

It was there before this PR.
Anyway, the gettext build system is complex and slow, and the gettext port has seen many attempts to shorten build times. The top-level Makefile (for ${SOURCE_PATH}/gettext-runtime!) will pull in additional build and install steps. If you don't like the SUBPATH approach, we might perhaps add entry points to an/the external Makefile provided by vcpkg - similar to what we already do for gettext-tools.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish to reduce the vcpkg_configure_cmake options.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fine for me. Shall I try to prepare a PR for the gettext Makefile approach? (Assuming we are not in a hurry.)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dg0yt Yes, also I will have a try.

endfunction()

if("tools" IN_LIST FEATURES)
set(BUILD_SOURCE_PATH ${SOURCE_PATH})
set(ADDITIONAL_CONFIGURE_OPTIONS ADDITIONAL_MSYS_PACKAGES gzip)
# Minimization of gettext tools build time by:
# - building tools only for release configuration
# - custom top-level Makefile
# - configuration cache
list(APPEND OPTIONS "--cache-file=../config.cache-${TARGET_TRIPLET}")
file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/config.cache-${TARGET_TRIPLET}")
build_libintl_and_tools(BUILD_TYPE "release")
vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin")
file(GLOB tool_libs
LIST_DIRECTORIES false
"${CURRENT_PACKAGES_DIR}/bin/*"
"${CURRENT_PACKAGES_DIR}/lib/*"
)
list(FILTER tool_libs EXCLUDE REGEX "intl[^/\\\\]*$")
file(REMOVE ${tool_libs})
file(GLOB tool_includes
LIST_DIRECTORIES true
"${CURRENT_PACKAGES_DIR}/include/*"
)
list(FILTER tool_includes EXCLUDE REGEX "intl[^/\\\\]*$")
file(REMOVE_RECURSE ${tool_includes})
if(VCPKG_TARGET_IS_LINUX)
set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/lib")
elseif(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}.release")
file(RENAME "${CURRENT_PACKAGES_DIR}" "${CURRENT_PACKAGES_DIR}.release")
file(READ "${CURRENT_BUILDTREES_DIR}/config.cache-${TARGET_TRIPLET}" config_cache)
string(REGEX REPLACE "\nac_cv_env[^\n]*" "" config_cache "${config_cache}") # Eliminate build type flags
file(WRITE "${CURRENT_BUILDTREES_DIR}/config.cache-${TARGET_TRIPLET}" "${config_cache}")
build_libintl_only(BUILD_TYPE "debug")
file(RENAME "${CURRENT_PACKAGES_DIR}/debug" "${CURRENT_PACKAGES_DIR}.release/debug")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}")
file(RENAME "${CURRENT_PACKAGES_DIR}.release" "${CURRENT_PACKAGES_DIR}")
endif()
else()
set(BUILD_SOURCE_PATH ${SOURCE_PATH}/gettext-runtime) # Could be its own port
set(ADDITIONAL_INSTALL_OPTIONS SUBPATH "/intl")
list(APPEND OPTIONS "--config-cache")
build_libintl_only()
endif()
vcpkg_configure_make(SOURCE_PATH ${BUILD_SOURCE_PATH}
DETERMINE_BUILD_TRIPLET
USE_WRAPPERS
ADD_BIN_TO_PATH # So configure can check for working iconv
OPTIONS --enable-relocatable #symbol duplication with glib-init.c?
--enable-c++
--disable-java
${OPTIONS}
${ADDITIONAL_CONFIGURE_OPTIONS}
)
vcpkg_install_make(${ADDITIONAL_INSTALL_OPTIONS})

# Handle copyright
file(COPY ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/gettext)
file(RENAME ${CURRENT_PACKAGES_DIR}/share/gettext/COPYING ${CURRENT_PACKAGES_DIR}/share/gettext/copyright)

vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin)
vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug/bin)
configure_file("${SOURCE_PATH}/COPYING" "${CURRENT_PACKAGES_DIR}/share/gettext/copyright" COPYONLY)

file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")

set(GNU_DLL_PATHS lib/ debug/lib/)
set(GNU_DLL_NAME GNU.Gettext.dll) #C# dll?
foreach(DLL_PATH IN LISTS GNU_DLL_PATHS)
if(EXISTS "${CURRENT_PACKAGES_DIR}/${DLL_PATH}${GNU_DLL_NAME}")
file(REMOVE "${CURRENT_PACKAGES_DIR}/${DLL_PATH}${GNU_DLL_NAME}")
endif()
endforeach()

vcpkg_copy_pdbs()

file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/intl)
if(NOT VCPKG_TARGET_IS_LINUX)
file(COPY "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/intl")
endif()
if("tools" IN_LIST FEATURES AND NOT VCPKG_CROSSCOMPILING)
file(COPY "${CMAKE_CURRENT_LIST_DIR}/vcpkg-port-config.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/gettext")
endif()
6 changes: 6 additions & 0 deletions ports/gettext/vcpkg-port-config.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
get_filename_component(gettext_tools_dir "${CMAKE_CURRENT_LIST_DIR}/../../tools/gettext/bin" ABSOLUTE)
if(CMAKE_HOST_WIN32)
set(ENV{PATH} "$ENV{PATH};${gettext_tools_dir}")
else()
set(ENV{PATH} "$ENV{PATH}:${gettext_tools_dir}")
endif()
2 changes: 1 addition & 1 deletion ports/gettext/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "gettext",
"version": "0.21",
"port-version": 3,
"port-version": 4,
"description": "The GNU gettext utilities are a set of tools that provides a framework to help other GNU packages produce multi-lingual messages. Provides libintl.",
"homepage": "https://www.gnu.org/software/gettext/",
"dependencies": [
Expand Down
21 changes: 0 additions & 21 deletions ports/kf5i18n/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,6 @@ vcpkg_from_github(
PATCHES ${PATCHES}
)

if(CMAKE_HOST_WIN32)
vcpkg_acquire_msys(MSYS_ROOT NO_DEFAULT_PACKAGES DIRECT_PACKAGES
"https://repo.msys2.org/mingw/i686/mingw-w64-i686-gettext-0.19.8.1-9-any.pkg.tar.zst"
c632877544183def8b19659421c5511b87f8339596e1606bd47608277a0bf427d370aba1732915c2832c91f6d525261623401f145b951ff3015f79ac54179c19
"https://repo.msys2.org/mingw/i686/mingw-w64-i686-libiconv-1.16-1-any.pkg.tar.xz"
ba236e1efc990cb91d459f938be6ca6fc2211be95e888d73f8de301bce55d586f9d2b6be55dacb975ec1afa7952b510906284eff70210238919e341dffbdbeb8
"https://repo.msys2.org/mingw/i686/mingw-w64-i686-gcc-libs-10.2.0-1-any.pkg.tar.zst"
113d8b3b155ea537be8b99688d454f781d70c67c810c2643bc02b83b332d99bfbf3a7fcada6b927fda67ef02cf968d4fdf930466c5909c4338bda64f1f3f483e
"https://repo.msys2.org/mingw/i686/mingw-w64-i686-libwinpthread-git-8.0.0.5906.c9a21571-1-any.pkg.tar.zst"
2c3d9e6b2eee6a4c16fd69ddfadb6e2dc7f31156627d85845c523ac85e5c585d4cfa978659b1fe2ec823d44ef57bc2b92a6127618ff1a8d7505458b794f3f01c
"https://repo.msys2.org/mingw/i686/mingw-w64-i686-mpc-1.1.0-1-any.pkg.tar.xz"
d236b815ec3cf569d24d96a386eca9f69a2b1e8af18e96c3f1e5a4d68a3598d32768c7fb3c92207ecffe531259822c1a421350949f2ffabd8ee813654f1af864
"https://repo.msys2.org/mingw/i686/mingw-w64-i686-mpfr-4.1.0-2-any.pkg.tar.zst"
caac5cb73395082b479597a73c7398bf83009dbc0051755ef15157dc34996e156d4ed7881ef703f9e92861cfcad000888c4c32e4bf38b2596c415a19aafcf893
"https://repo.msys2.org/mingw/i686/mingw-w64-i686-gmp-6.2.0-1-any.pkg.tar.xz"
37747f3f373ebff1a493f5dec099f8cd6d5abdc2254d9cd68a103ad7ba44a81a9a97ccaba76eaee427b4d67b2becb655ee2c379c2e563c8051b6708431e3c588
)
set(GETTEXT_PATH ${MSYS_ROOT}/mingw32/bin)
vcpkg_add_to_path(${GETTEXT_PATH})
endif()

vcpkg_find_acquire_program(PYTHON3)

vcpkg_configure_cmake(
Expand Down
9 changes: 8 additions & 1 deletion ports/kf5i18n/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
{
"name": "kf5i18n",
"version": "5.81.0",
"port-version": 1,
"port-version": 2,
"description": "Advanced internationalization framework",
"homepage": "https://api.kde.org/frameworks/ki18n/html/index.html",
"dependencies": [
"ecm",
"gettext",
{
"name": "gettext",
"host": true,
"features": [
"tools"
]
},
"qt5-declarative",
"qt5-tools"
]
Expand Down
4 changes: 2 additions & 2 deletions versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -2258,7 +2258,7 @@
},
"gettext": {
"baseline": "0.21",
"port-version": 3
"port-version": 4
},
"gettimeofday": {
"baseline": "2017-10-14-3",
Expand Down Expand Up @@ -2890,7 +2890,7 @@
},
"kf5i18n": {
"baseline": "5.81.0",
"port-version": 1
"port-version": 2
},
"kf5itemmodels": {
"baseline": "5.81.0",
Expand Down
5 changes: 5 additions & 0 deletions versions/g-/gettext.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "b6cde01ab4095a258993eaf85eb31c1e845c64a6",
"version": "0.21",
"port-version": 4
},
{
"git-tree": "33c7af8451faeef94c8a06cb41b71dce144d6fba",
"version": "0.21",
Expand Down
5 changes: 5 additions & 0 deletions versions/k-/kf5i18n.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "98407edcc42c1bb91f4a1fe218f30c3a2757a530",
"version": "5.81.0",
"port-version": 2
},
{
"git-tree": "a749b5eb069f5e7a8c84a65746ca7579d2e85af5",
"version": "5.81.0",
Expand Down