diff options
Diffstat (limited to '')
-rw-r--r-- | src/include/CMakeLists.txt | 8 | ||||
-rw-r--r-- | src/include/README | 3 | ||||
-rw-r--r-- | src/include/glibmm_version.h | 45 | ||||
-rw-r--r-- | src/include/gtkmm_version.h | 45 | ||||
-rw-r--r-- | src/include/macros.h | 52 | ||||
-rw-r--r-- | src/include/source_date_epoch.h | 68 |
6 files changed, 221 insertions, 0 deletions
diff --git a/src/include/CMakeLists.txt b/src/include/CMakeLists.txt new file mode 100644 index 0000000..5e08ebd --- /dev/null +++ b/src/include/CMakeLists.txt @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +set(include_SRC + glibmm_version.h + gtkmm_version.h + macros.h +) + +add_inkscape_source("${io_SRC}") diff --git a/src/include/README b/src/include/README new file mode 100644 index 0000000..336b3e2 --- /dev/null +++ b/src/include/README @@ -0,0 +1,3 @@ +Configuration, defines, macros and similar that do not fit anywhere else. + +Try to keep this to a minimum and move to more suitable locations whenever possible. diff --git a/src/include/glibmm_version.h b/src/include/glibmm_version.h new file mode 100644 index 0000000..39bf2c6 --- /dev/null +++ b/src/include/glibmm_version.h @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/** @file + * macro for checking glibmm version + *//* + * Authors: + * Patrick Storz <eduard.braun2@gmx.de> + * + * Copyright (C) 2020 Authors + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#ifndef SEEN_GLIBMM_VERSION +#define SEEN_GLIBMM_VERSION + +#include <glibmm.h> + +#ifndef GLIBMM_CHECK_VERSION + +#if !defined(GLIBMM_MAJOR_VERSION) || !defined(GLIBMM_MINOR_VERSION) || !defined(GLIBMM_MICRO_VERSION) + #error "Missing defines for glibmm version (GLIBMM_MAJOR_VERSION / GLIBMM_MINOR_VERSION / GLIBMM_MICRO_VERSION)" +#endif + +/** + * Check glibmm version + * + * This is adapted from the upstream gtk macro for use with glibmm + * + * @major: major version (e.g. 1 for version 1.2.5) + * @minor: minor version (e.g. 2 for version 1.2.5) + * @micro: micro version (e.g. 5 for version 1.2.5) + * + * Returns %TRUE if the version of the glibmm header files + * is the same as or newer than the passed-in version. + * + * Returns: %TRUE if glibmm headers are new enough + */ +#define GLIBMM_CHECK_VERSION(major,minor,micro) \ + (GLIBMM_MAJOR_VERSION > (major) || \ + (GLIBMM_MAJOR_VERSION == (major) && GLIBMM_MINOR_VERSION > (minor)) || \ + (GLIBMM_MAJOR_VERSION == (major) && GLIBMM_MINOR_VERSION == (minor) && \ + GLIBMM_MICRO_VERSION >= (micro))) + +#endif // #ifndef GLIBMM_CHECK_VERSION + +#endif // SEEN_GLIBMM_VERSION diff --git a/src/include/gtkmm_version.h b/src/include/gtkmm_version.h new file mode 100644 index 0000000..a23223c --- /dev/null +++ b/src/include/gtkmm_version.h @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/** @file + * macro for checking gtkmm version + *//* + * Authors: + * Patrick Storz <eduard.braun2@gmx.de> + * + * Copyright (C) 2018 Authors + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#ifndef SEEN_GTKMM_VERSION +#define SEEN_GTKMM_VERSION + +#include <gtkmm.h> + +#ifndef GTKMM_CHECK_VERSION + +#if !defined(GTKMM_MAJOR_VERSION) || !defined(GTKMM_MINOR_VERSION) || !defined(GTKMM_MICRO_VERSION) + #error "Missing defines for gtkmm version (GTKMM_MAJOR_VERSION / GTKMM_MINOR_VERSION / GTKMM_MICRO_VERSION)" +#endif + +/** + * Check GtkMM version + * + * This is adapted from the upstream Gtk+ macro for use with GtkMM + * + * @major: major version (e.g. 1 for version 1.2.5) + * @minor: minor version (e.g. 2 for version 1.2.5) + * @micro: micro version (e.g. 5 for version 1.2.5) + * + * Returns %TRUE if the version of the GTK+ header files + * is the same as or newer than the passed-in version. + * + * Returns: %TRUE if GTK+ headers are new enough + */ +#define GTKMM_CHECK_VERSION(major,minor,micro) \ + (GTKMM_MAJOR_VERSION > (major) || \ + (GTKMM_MAJOR_VERSION == (major) && GTKMM_MINOR_VERSION > (minor)) || \ + (GTKMM_MAJOR_VERSION == (major) && GTKMM_MINOR_VERSION == (minor) && \ + GTKMM_MICRO_VERSION >= (micro))) + +#endif // #ifndef GTKMM_CHECK_VERSION + +#endif // SEEN_GTKMM_VERSION diff --git a/src/include/macros.h b/src/include/macros.h new file mode 100644 index 0000000..aa1719d --- /dev/null +++ b/src/include/macros.h @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#ifndef SEEN_MACROS_H +#define SEEN_MACROS_H + +/** + * Useful macros for inkscape + * + * Author: + * Lauris Kaplinski <lauris@kaplinski.com> + * + * Copyright (C) 2002 Lauris Kaplinski + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +// I'm of the opinion that this file should be removed, so I will in the future take the necessary steps to wipe it out. +// Macros are not in general bad, but these particular ones are rather ugly. --Liam + +#define sp_signal_disconnect_by_data(o,d) g_signal_handlers_disconnect_matched(o, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, d) + +// "primary" modifier: Ctrl on Linux/Windows and Cmd on macOS. +// note: Could query this at runtime with +// `gdk_keymap_get_modifier_mask(..., GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR)` +#ifdef GDK_WINDOWING_QUARTZ +#define INK_GDK_PRIMARY_MASK GDK_MOD2_MASK +#else +#define INK_GDK_PRIMARY_MASK GDK_CONTROL_MASK +#endif + +// all modifiers used by Inkscape +#define INK_GDK_MODIFIER_MASK (GDK_SHIFT_MASK | INK_GDK_PRIMARY_MASK | GDK_MOD1_MASK) + +// keyboard modifiers in an event +#define MOD__SHIFT(event) ((event)->key.state & GDK_SHIFT_MASK) +#define MOD__CTRL(event) ((event)->key.state & INK_GDK_PRIMARY_MASK) +#define MOD__ALT(event) ((event)->key.state & GDK_MOD1_MASK) +#define MOD__SHIFT_ONLY(event) (((event)->key.state & INK_GDK_MODIFIER_MASK) == GDK_SHIFT_MASK) +#define MOD__CTRL_ONLY(event) (((event)->key.state & INK_GDK_MODIFIER_MASK) == INK_GDK_PRIMARY_MASK) +#define MOD__ALT_ONLY(event) (((event)->key.state & INK_GDK_MODIFIER_MASK) == GDK_MOD1_MASK) + +#endif // SEEN_MACROS_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8 : diff --git a/src/include/source_date_epoch.h b/src/include/source_date_epoch.h new file mode 100644 index 0000000..7a18d60 --- /dev/null +++ b/src/include/source_date_epoch.h @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/** @file + * Functions to parse the "SOURCE_DATE_EPOCH" environment variable for reproducible build hacks, see + * https://reproducible-builds.org/docs/source-date-epoch/ + *//* + * Authors: + * Patrick Storz <eduard.braun2@gmx.de> + * + * Copyright (C) 2019 Authors + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#ifndef SEEN_SOURCE_DATE_EPOCH +#define SEEN_SOURCE_DATE_EPOCH + +#include <sstream> +#include <iostream> +#include <cstdlib> +#include <ctime> + +namespace ReproducibleBuilds { + +/** parse current time from SOURCE_DATE_EPOCH environment variable + * + * \return current time (or zero if SOURCE_DATE_EPOCH unset) + */ +time_t now() +{ + time_t now = 0; + + char *source_date_epoch = std::getenv("SOURCE_DATE_EPOCH"); + if (source_date_epoch) { + std::istringstream iss(source_date_epoch); + iss >> now; + if (iss.fail() || !iss.eof()) { + std::cerr << "Error: Cannot parse SOURCE_DATE_EPOCH as integer\n"; + std::terminate(); + } + } + + return now; +} + +/** like ReproducibleBuilds::now() but returns a ISO 8601 formatted string + * + * \return current time as ISO 8601 formatted string (or empty string if SOURCE_DATE_EPOCH unset) + */ +Glib::ustring now_iso_8601() +{ + Glib::ustring now_formatted; + + time_t now = ReproducibleBuilds::now(); + if (now) { + const tm *now_struct; + char buffer[25]; + + now_struct = gmtime(&now); + if (strftime(buffer, 25, "%Y-%m-%dT%H:%M:%S", now_struct)) { + now_formatted = buffer; + } + } + + return now_formatted; +} + +} // namespace ReproducibleBuilds + +#endif // SEEN_SOURCE_DATE_EPOCH |