From 47fb9653b86986a76d9a5dd67955ffd598755e17 Mon Sep 17 00:00:00 2001 From: Přemysl Eric Janouch
Date: Fri, 22 Oct 2021 15:04:24 +0200 Subject: Bump the CMake version requirement, fix Windows - Add a missing runtime library for gettext-tools. - Remove the no longer necessary customized FindGettext.cmake, since the downloaded gettext binaries are new enough. - Make the installer at least ask to uninstall previous versions. - Adjust the PATH of tests so that they'll run on Windows directly. - Fix quoting so that the project will build inside paths with spaces. - Resolve a GSettings deprecation warning. - Update the README's build instructions as appropriate. - Require CMake 3.9 because of the README's suggestion to fix FindPkgConfig.cmake manually using separate_arguments(UNIX_COMMAND). Tested build configurations: - native Arch Linux, - native Windows XP with the newest NSIS, - Arch Linux Mingw-w64 i686 Win32Depends.cmake NSIS cross-build + XP, - Arch Linux Mingw-w64 x86_64 MSYS2 NSIS cross-build + Windows 10. Detected issues: - The file save dialog will not add the extension automatically, seen with MSYS2. --- CMakeLists.txt | 51 +++++++++------------- README.adoc | 11 +++-- Win32Depends.cmake | 8 +++- cmake/FindGettext.cmake | 99 ------------------------------------------- config.h.in | 2 +- share/org.logdiag.gschema.xml | 2 +- 6 files changed, 36 insertions(+), 137 deletions(-) delete mode 100644 cmake/FindGettext.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f7726a..e2745f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,6 @@ -project (logdiag C) # The last version with Windows XP support is 3.13, we want to keep that -cmake_minimum_required (VERSION 2.8.12) - -# Default to 2.8.12 behaviour -cmake_policy (VERSION 2.8.12) +cmake_minimum_required (VERSION 3.9) +project (logdiag VERSION 0.2.0 LANGUAGES C) # Options option (OPTION_USE_VERA "Use vera++ for source code style checks" OFF) @@ -11,14 +8,6 @@ option (OPTION_NOINSTALL "Only for developers; work without installing" OFF) option (BUILD_TESTING "Build tests" OFF) # Project information -set (project_VERSION_MAJOR "0") -set (project_VERSION_MINOR "2") -set (project_VERSION_PATCH "0") - -set (project_VERSION "${project_VERSION_MAJOR}") -set (project_VERSION "${project_VERSION}.${project_VERSION_MINOR}") -set (project_VERSION "${project_VERSION}.${project_VERSION_PATCH}") - set (project_URL "https://git.janouch.name/p/logdiag") # For custom modules @@ -91,7 +80,6 @@ else (NOT WIN32) # For whatever reason this now seems to be required set (LUA_INCLUDE_DIR "${WIN32_DEPENDS_PATH}/include") - # XXX: this seems to require CMake 3.0 ... include it in the project? find_package (Lua REQUIRED) if (LUA_VERSION_STRING VERSION_LESS "5.2") message (FATAL_ERROR "Lua 5.2 not found") @@ -115,7 +103,7 @@ foreach (file ${project_PO_FILES}) list (APPEND project_TRANSLATIONS "${translation}") endforeach (file) -# Documentation +# Documentation--gtk-doc 1.25 is required find_package (GtkDoc 1.25) set (project_DOC_DIR "${PROJECT_BINARY_DIR}/liblogdiag") @@ -251,9 +239,13 @@ if (BUILD_TESTING) foreach (name ${logdiag_TESTS}) add_executable (test-${name} tests/${name}.c) target_link_libraries (test-${name} liblogdiag ${logdiag_LIBS}) - - add_test (test-${name} test-${name}) + add_test (NAME test-${name} COMMAND test-${name}) + list (APPEND logdiag_TEST_TARGETS test-${name}) endforeach (name) + if (WIN32 AND NOT CMAKE_CROSSCOMPILING) + set_tests_properties (${logdiag_TEST_TARGETS} + PROPERTIES ENVIRONMENT "PATH=${WIN32_DEPENDS_PATH}/bin") + endif () endif (BUILD_TESTING) # Generate documentation @@ -385,25 +377,20 @@ else (WIN32) install (FILES LICENSE NEWS DESTINATION share/doc/${PROJECT_NAME}) endif (WIN32) -install (FILES ${GSETTINGS_SCHEMAS} - DESTINATION share/glib-2.0/schemas) +install (DIRECTORY share/gui share/library DESTINATION share/${PROJECT_NAME}) +install (FILES ${GSETTINGS_SCHEMAS} DESTINATION share/glib-2.0/schemas) install (CODE " # DESTDIR is not in use on Windows if (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\") - execute_process (COMMAND ${GLIB_COMPILE_SCHEMAS_EXECUTABLE} + execute_process (COMMAND \"${GLIB_COMPILE_SCHEMAS_EXECUTABLE}\" \"\${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas\") endif (WIN32 OR \"\$ENV{DESTDIR}\" STREQUAL \"\")") -install (DIRECTORY share/gui share/library - DESTINATION share/${PROJECT_NAME}) - # CPack set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Schematic editor") set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch") set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch
")
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
-set (CPACK_PACKAGE_VERSION_MAJOR ${project_VERSION_MAJOR})
-set (CPACK_PACKAGE_VERSION_MINOR ${project_VERSION_MINOR})
-set (CPACK_PACKAGE_VERSION_PATCH ${project_VERSION_PATCH})
+set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
if (WIN32)
set (CPACK_GENERATOR "NSIS;ZIP")
@@ -413,11 +400,13 @@ else (WIN32)
endif (WIN32)
set (CPACK_PACKAGE_FILE_NAME
- "${PROJECT_NAME}-${project_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
-set (CPACK_PACKAGE_INSTALL_DIRECTORY
- "${PROJECT_NAME} ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}")
+ "${PROJECT_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
+set (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME} ${CPACK_PACKAGE_VERSION}")
+
+# XXX: It is still possible to install multiple copies, making commands collide.
+set (CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
+set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${PROJECT_NAME}")
-# FIXME: It is possible to install multiple copies. Everything screws up then.
set (CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/share\\\\header.bmp")
set (CPACK_NSIS_INSTALLED_ICON_NAME "logdiag.exe")
set (CPACK_NSIS_CREATE_ICONS_EXTRA "
@@ -451,7 +440,7 @@ set (CPACK_RPM_PACKAGE_URL "${project_URL}")
set (CPACK_SOURCE_GENERATOR "TGZ;ZIP")
set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git;/build;/CMakeLists.txt.user;/win32-depends;/liblogdiag/ld-marshal.[ch]")
-set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${project_VERSION}")
+set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
include (CPack)
diff --git a/README.adoc b/README.adoc
index fbd7109..ab899d8 100644
--- a/README.adoc
+++ b/README.adoc
@@ -15,7 +15,7 @@ a package with the latest development version from Archlinux's AUR.
Requirements
------------
Runtime dependencies: GTK+ >= 3.8, json-glib >= 0.10.4, lua >= 5.2 +
-Build dependencies: CMake >= 2.8.12
+Build dependencies: CMake >= 3.9
Build from source on Unix-like systems
--------------------------------------
@@ -53,8 +53,11 @@ Build from source on Windows
----------------------------
_Note that with the current method we're stuck with GTK+ 3.8.2._
-First install CMake >= 3.1 and MinGW. Add both to your system path. If you want
-to build an installation package, also install NSIS.
+First install CMake and MinGW. Add both to your system path. If you want
+to build an installation package, also install NSIS. If you want to build within
+a path containing spaces, fix your FindPkgConfig.cmake to say:
+
+ separate_arguments(_pkgconfig_invoke_result UNIX_COMMAND "${_pkgconfig_invoke_result}")
Run the following command in the directory with source files to automatically
fetch and setup all dependencies (contact me if the script becomes obsolete,
@@ -63,6 +66,8 @@ releasing a new version in order to resolve compatibility issues):
> cmake -P Win32Depends.cmake
+Note that Windows XP is no longer able to reliably download from HTTPS sources.
+
Reserve a directory for an out-of-source build:
> mkdir build
diff --git a/Win32Depends.cmake b/Win32Depends.cmake
index 63e9cd5..515072c 100644
--- a/Win32Depends.cmake
+++ b/Win32Depends.cmake
@@ -28,8 +28,12 @@ set (pkg_7za_urls "${pkg_7za_root}/7-Zip/9.20/7za920.zip")
set (pkg_7za_md5 "2fac454a90ae96021f4ffc607d4c00f8")
set (pkg_gtk_root "http://ftp.gnome.org/pub/gnome/binaries/win32")
-set (pkg_gtk_urls "${pkg_gtk_root}/dependencies/gettext-tools-0.17.zip")
-set (pkg_gtk_md5 "09baff956ebd1c391c7f71e9bd768edd")
+set (pkg_gtk_urls
+ "${pkg_gtk_root}/dependencies/gettext-tools-0.17.zip"
+ "${pkg_gtk_root}/dependencies/gettext-runtime-0.17-1.zip")
+set (pkg_gtk_md5
+ "09baff956ebd1c391c7f71e9bd768edd"
+ "110394b4b1e0a50cd440f1e8729d159c")
# https://sourceforge.net/projects/urlget/files
# /GTK%2B%203%20binary%20for%20Windows/GTK%2B%203.16.6/
diff --git a/cmake/FindGettext.cmake b/cmake/FindGettext.cmake
deleted file mode 100644
index 5b66acb..0000000
--- a/cmake/FindGettext.cmake
+++ /dev/null
@@ -1,99 +0,0 @@
-# - Find GNU gettext tools
-# This module looks for the GNU gettext tools. This module defines the
-# following values:
-# GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
-# GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
-# GETTEXT_FOUND: True if gettext has been found.
-#
-# Additionally it provides the following macros:
-# GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN )
-# This will create a target "${PROJECT_NAME}_translations" which will
-# convert the given input po files into the binary output mo file.
-# If the ALL option is used, the translations will also be created
-# when building the default target.
-
-#=============================================================================
-# Copyright 2007-2009 Kitware, Inc.
-# Copyright 2010-2011 Přemysl Eric Janouch
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# * Neither the name of the Kitware nor the names of contributors may be
-# used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-# OF SUCH DAMAGE.
-#=============================================================================
-
-find_program (GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
-find_program (GETTEXT_MSGFMT_EXECUTABLE msgfmt)
-
-macro (GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
- # Make it a real variable, so we can modify it here.
- set (_firstPoFile "${_firstPoFileArg}")
-
- set (_gmoFiles)
- get_filename_component (_potBasename ${_potFile} NAME_WE)
- get_filename_component (_absPotFile ${_potFile} ABSOLUTE)
-
- set (_addToAll)
- if (${_firstPoFile} STREQUAL "ALL")
- set (_addToAll "ALL")
- set (_firstPoFile)
- endif (${_firstPoFile} STREQUAL "ALL")
-
- foreach (_currentPoFile ${_firstPoFile} ${ARGN})
- get_filename_component (_absFile ${_currentPoFile} ABSOLUTE)
- get_filename_component (_abs_PATH ${_absFile} PATH)
- get_filename_component (_lang ${_absFile} NAME_WE)
- set (_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
-
- # msgmerge versions older than 0.11 don't actually support --update
- # and --backup, let's try to workaround that (tested on 0.10.40).
- execute_process (COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} -V
- OUTPUT_VARIABLE _msgmergeVersion)
- string (REGEX MATCH "0[.][0-9]+" _msgmergeVersion ${_msgmergeVersion})
- if ("${_msgmergeVersion}" MATCHES "[.]10|[.][0-9]")
- set (_msgmergeParams --quiet -s
- ${_absFile} -o ${_absFile} ${_absPotFile})
- else ("${_msgmergeVersion}" MATCHES "[.]10|[.][0-9]")
- set (_msgmergeParams --quiet --update --backup=none -s
- ${_absFile} ${_absPotFile})
- endif ("${_msgmergeVersion}" MATCHES "[.]10|[.][0-9]")
-
- add_custom_command (
- OUTPUT ${_gmoFile}
- COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} ${_msgmergeParams}
- COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
- DEPENDS ${_absPotFile} ${_absFile}
- )
-
- install (FILES ${_gmoFile} DESTINATION
- share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
- set (_gmoFiles ${_gmoFiles} ${_gmoFile})
- endforeach (_currentPoFile)
-
- add_custom_target (${PROJECT_NAME}_translations ${_addToAll}
- DEPENDS ${_gmoFiles})
-endmacro (GETTEXT_CREATE_TRANSLATIONS)
-
-include (FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS (Gettext DEFAULT_MSG
- GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE)
-
-
diff --git a/config.h.in b/config.h.in
index 9ddcf53..a7b11ad 100644
--- a/config.h.in
+++ b/config.h.in
@@ -9,7 +9,7 @@
#define __CONFIG_H__
#define PROJECT_NAME "${PROJECT_NAME}"
-#define PROJECT_VERSION "${project_VERSION}"
+#define PROJECT_VERSION "${PROJECT_VERSION}"
#define PROJECT_URL "${project_URL}"
#cmakedefine OPTION_NOINSTALL
diff --git a/share/org.logdiag.gschema.xml b/share/org.logdiag.gschema.xml
index aed6cb1..71131d4 100644
--- a/share/org.logdiag.gschema.xml
+++ b/share/org.logdiag.gschema.xml
@@ -1,5 +1,5 @@