From 7f0f83638fcb2dcbb39af1849052db55eb78113a Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sun, 8 Nov 2015 15:40:44 +0300 Subject: [PATCH] In progress... --- .gitmodules | 6 + AUTHORS | 1 + CMakeLists.txt | 23 +++ COPYING | 165 ++++++++++++++++++ INSTALL | 85 +++++++++ MAINTAINERS | 2 + cmake/backbone | 1 + config/CMakeLists.txt | 5 + config/Config.vapi | 6 + config/config.h.in | 3 + ...aview.plugins.protocol-example.gschema.xml | 23 +++ cpack/CMakeLists.txt | 9 + pkg-config/CMakeLists.txt | 6 + po/CMakeLists.txt | 1 + po/de/CMakeLists.txt | 1 + po/ru/CMakeLists.txt | 1 + src/AppDirs.vala | 32 ++++ src/CMakeLists.txt | 14 ++ src/library_constructor.c | 45 +++++ src/main.vala | 39 +++++ test/CMakeLists.txt | 0 ui/CMakeLists.txt | 1 + ui/glade/CMakeLists.txt | 1 + ui/glade/protocol-example.glade | 0 util/backbone | 1 + valadoc_env | 2 + 26 files changed, 473 insertions(+) create mode 100644 .gitmodules create mode 100644 AUTHORS create mode 100644 CMakeLists.txt create mode 100644 COPYING create mode 100644 INSTALL create mode 100644 MAINTAINERS create mode 160000 cmake/backbone create mode 100644 config/CMakeLists.txt create mode 100644 config/Config.vapi create mode 100644 config/config.h.in create mode 100644 config/ws.backbone.laview.plugins.protocol-example.gschema.xml create mode 100644 cpack/CMakeLists.txt create mode 100644 pkg-config/CMakeLists.txt create mode 100644 po/CMakeLists.txt create mode 100644 po/de/CMakeLists.txt create mode 100644 po/ru/CMakeLists.txt create mode 100644 src/AppDirs.vala create mode 100644 src/CMakeLists.txt create mode 100644 src/library_constructor.c create mode 100644 src/main.vala create mode 100644 test/CMakeLists.txt create mode 100644 ui/CMakeLists.txt create mode 100644 ui/glade/CMakeLists.txt create mode 100644 ui/glade/protocol-example.glade create mode 160000 util/backbone create mode 100644 valadoc_env diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..309b0cd --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "cmake/backbone"] + path = cmake/backbone + url = git@git.backbone.ws:cmake/backbone.git +[submodule "util/backbone"] + path = util/backbone + url = git@git.backbone.ws:cmake/backbone-utils.git diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..609258d --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Kolan Sh diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8d5ce8f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,23 @@ +PROJECT (LAviewPluginProtocolExample C) + +CMAKE_MINIMUM_REQUIRED (VERSION 2.8) + +SET (PROJECT_LOWERCASE_NAME "laview-plugin-protocol-example") +SET (PROJECT_DESCRIPTION "LAview Plugin Protocol Example.") + +SET (MAJOR 0) +SET (MINOR 0) +SET (PATCH 0) + +LIST (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/backbone) + +ADD_SUBDIRECTORY (config) +ADD_SUBDIRECTORY (src) +ADD_SUBDIRECTORY (po) +ADD_SUBDIRECTORY (pkg-config) +ADD_SUBDIRECTORY (test) +ADD_SUBDIRECTORY (cpack) +ADD_SUBDIRECTORY (ui) + +# enable testing +ENABLE_TESTING () diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/COPYING @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..067530d --- /dev/null +++ b/INSTALL @@ -0,0 +1,85 @@ + Requirements + ------------ + + Build-Time Dependencies + +LAview-Core: https://redmine.backbone.ws/projects/laview-core +GTK+-3:http://www.gtk.org/ +CMake: http://www.cmake.org +NSIS (W32): http://nsis.sourceforge.net + + Run-Time Dependencies + +GTK+-3:http://www.gtk.org/ +LAview-Core: https://redmine.backbone.ws/projects/laview-core + + Operation Systems + + * GNU/Linux (Gentoo, Debian, etc.) + * MS Windows (Windows 5.1 aka XP) + * BSD-based (FreeBSD, OpenBSD, NetBSD, Mac OS X) + +If you need support of one more OS, be free in writing of patches and sending +pull-requests to the mainstream. + + + Compilation + ----------- + + Compilation under GNU/Linux + +$ mkdir build-gcc && cd build-gcc +$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr +$ make -j$((`getconf _NPROCESSORS_ONLN`+1)) + + Compilation under MS Windows + +$ mkdir build-mingw && cd build-mingw +$ cmake -G "MSYS Makefiles" .. -DCMAKE_BUILD_TYPE=Release +$ make -j$((NUMBER_OF_PROCESSORS + 1)) + + Compilation under BSD-based Systems. + +TODO: add description here. + + + Packing/Installation + -------------------- + + Packing/Installation under GNU/Linux + +$ cpack +Install using System Package Manager. + + Packing/Installation under MS Windows + +$ cpack +Install using generated by NSIS executable. + + Packing/Installation under BSD-based + +$ cpack +Install using System Package Manager. + + + Testing + ------- + + Testing under GNU/Linux + +$ ctest -j$((`getconf _NPROCESSORS_ONLN`+1)) + +Automated tests for memory leaks: +$ ctest -j$((NUMBER_OF_PROCESSORS + 1)) -D NightlyMemCheck && grep definitely Testing/Temporary/LastDynamicAnalysis_*.log + + Testing under MS Windows + +$ ctest -j$((NUMBER_OF_PROCESSORS + 1)) +Automated tests for memory leaks are not available as far as Valgrind not +present on this platform. + + Testing under BSD-based + +$ ctest +Automated tests for memory leaks are not available as far as Valgrind not +present on this platform. diff --git a/MAINTAINERS b/MAINTAINERS new file mode 100644 index 0000000..f2b408a --- /dev/null +++ b/MAINTAINERS @@ -0,0 +1,2 @@ +Kolan Sh +email: backbone@backbone.ws diff --git a/cmake/backbone b/cmake/backbone new file mode 160000 index 0000000..2c0df24 --- /dev/null +++ b/cmake/backbone @@ -0,0 +1 @@ +Subproject commit 2c0df243a1518c857ae9db48281e9d489003bf63 diff --git a/config/CMakeLists.txt b/config/CMakeLists.txt new file mode 100644 index 0000000..1f06cec --- /dev/null +++ b/config/CMakeLists.txt @@ -0,0 +1,5 @@ +CONFIGURE_FILE ("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/config.h") + +SET (GSchemaFile "ws.backbone.laview.plugins.protocol-example") +INCLUDE (GSchemaCommonRules) diff --git a/config/Config.vapi b/config/Config.vapi new file mode 100644 index 0000000..24a890f --- /dev/null +++ b/config/Config.vapi @@ -0,0 +1,6 @@ +[CCode (cheader_filename = "config.h")] +namespace Config { + static const int VERSION_MAJOR; + static const int VERSION_MINOR; + static const int VERSION_PATCH; +} diff --git a/config/config.h.in b/config/config.h.in new file mode 100644 index 0000000..3c66f33 --- /dev/null +++ b/config/config.h.in @@ -0,0 +1,3 @@ +#define CONFIG_VERSION_MAJOR @MAJOR@ +#define CONFIG_VERSION_MINOR @MINOR@ +#define CONFIG_VERSION_PATCH @PATCH@ diff --git a/config/ws.backbone.laview.plugins.protocol-example.gschema.xml b/config/ws.backbone.laview.plugins.protocol-example.gschema.xml new file mode 100644 index 0000000..35cfcdb --- /dev/null +++ b/config/ws.backbone.laview.plugins.protocol-example.gschema.xml @@ -0,0 +1,23 @@ + + + + + "Hello, earthlings" + A greeting + Greeting of the invading martians + + + + 99 + Bottles of beer + Number of bottles of beer on the wall + + + + false + Is the light switched on? + State of an imaginary light switch. + + + + diff --git a/cpack/CMakeLists.txt b/cpack/CMakeLists.txt new file mode 100644 index 0000000..9077a8b --- /dev/null +++ b/cpack/CMakeLists.txt @@ -0,0 +1,9 @@ +SET (CONTACT "backbone@backbone.ws") +SET (DEBIAN_DEPENDENCIES "laview-core-0 >= 0.0.0") +SET (DEBIAN_SECTION "TeX") +SET (REDHAT_DEPENDENCIES "laview-core-0 >= 0.0.0") +SET (REDHAT_SECTION "Applications/Publishing") +SET (LICENSE "LGPLv3+") +SET (WIN32_UNINSTALL_NAME "LAvPlPEx") # <= 8 symbols for the name + +INCLUDE (CPackCommonRules) diff --git a/pkg-config/CMakeLists.txt b/pkg-config/CMakeLists.txt new file mode 100644 index 0000000..d349889 --- /dev/null +++ b/pkg-config/CMakeLists.txt @@ -0,0 +1,6 @@ +INCLUDE (PkgConfigCommonRules) + +CONFIGURE_FILE ( + "${CMAKE_SOURCE_DIR}/cmake/backbone/templates/pkg-config.pc.in" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_LOWERCASE_NAME}-${MAJOR}.pc" +) diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 0000000..c191c1b --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1 @@ +INCLUDE (GettextCommonRules) diff --git a/po/de/CMakeLists.txt b/po/de/CMakeLists.txt new file mode 100644 index 0000000..0b6020c --- /dev/null +++ b/po/de/CMakeLists.txt @@ -0,0 +1 @@ +INCLUDE (GettextLangRules) diff --git a/po/ru/CMakeLists.txt b/po/ru/CMakeLists.txt new file mode 100644 index 0000000..0b6020c --- /dev/null +++ b/po/ru/CMakeLists.txt @@ -0,0 +1 @@ +INCLUDE (GettextLangRules) diff --git a/src/AppDirs.vala b/src/AppDirs.vala new file mode 100644 index 0000000..65b648e --- /dev/null +++ b/src/AppDirs.vala @@ -0,0 +1,32 @@ +extern static char SO_PATH[256]; + +/*namespace LAview.Core { + + class AppDirs { + + public static File so_path; + public static File exec_dir; + public static File common_dir; + public static string data_plugins_dir; + public static string protocol_plugins_dir; + public static string ui_dir; + public static string settings_dir; + + public static void init () { + so_path = File.new_for_path ((string)SO_PATH); + exec_dir = so_path.get_parent (); + common_dir = exec_dir.get_parent (); + ui_dir = Path.build_path (Path.DIR_SEPARATOR_S, common_dir.get_path(), + "share/laview-core-"+Config.VERSION_MAJOR.to_string()+"/ui"); + settings_dir = Path.build_path (Path.DIR_SEPARATOR_S, common_dir.get_path(), "share/glib-2.0/schemas"); + data_plugins_dir = Path.build_path (Path.DIR_SEPARATOR_S, exec_dir.get_path(), + "laview-core-"+Config.VERSION_MAJOR.to_string()+"/data-plugins"); + protocol_plugins_dir = Path.build_path (Path.DIR_SEPARATOR_S, exec_dir.get_path(), + "laview-core-"+Config.VERSION_MAJOR.to_string()+"/protocol-plugins"); + + } + + public static void terminate () { + } + } +}*/ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..5151ba5 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,14 @@ +SET (PluginName laview-plugin-protocol-example-${MAJOR}) +FILE (GLOB_RECURSE PluginSources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.vala) +SET (PluginPackages gtk+-3.0 gee-0.8 gobject-plugin-iface-0 laview-core-iface-0 laview-core-0) +SET (PluginPkgModules gtk+-3.0 gee-0.8 laview-core-0) +SET (PluginCustomVapis ${CMAKE_SOURCE_DIR}/config/Config.vapi) +INCLUDE_DIRECTORIES ("${CMAKE_BINARY_DIR}/config") +SET (PluginExtraSources ${PROJECT_SOURCE_DIR}/src/library_constructor.c) +SET (PluginInstall ON) +IF (WIN32) + SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mwindows") + SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--export-all-symbols") +ENDIF (WIN32) +SET (PluginInstallPrefix "lib/laview-core-0/protocol-plugins") +INCLUDE (ValaPluginCommonRules) diff --git a/src/library_constructor.c b/src/library_constructor.c new file mode 100644 index 0000000..73d675d --- /dev/null +++ b/src/library_constructor.c @@ -0,0 +1,45 @@ +#if defined(_WIN32) || defined(_WIN64) + #include +#elif defined(linux) || defined(UNIX) || defined(__unix__) + #define _GNU_SOURCE + #include + #include +#endif + +char SO_PATH[FILENAME_MAX]; + +#include "gettext-config.h" + +#if defined(_WIN32) || defined(_WIN64) +BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) +#elif defined(linux) || defined(UNIX) || defined(__unix__) +void __attribute__ ((constructor)) load_library (void) +#endif +{ +#if defined(_WIN32) || defined(_WIN64) + gchar dllPath[FILENAME_MAX], + *dllDir, + *localePath; + + GetModuleFileName (hInstance, dllPath, FILENAME_MAX); + dllDir = g_path_get_dirname (dllPath); + localePath = g_build_filename (dllDir, "../share/locale", NULL); + g_free (dllDir); + bindtextdomain (GETTEXT_PACKAGE, localePath); + g_free (localePath); +#elif defined(linux) || defined(UNIX) || defined(__unix__) + Dl_info dl_info; + dladdr(load_library, &dl_info); + strcpy (SO_PATH, dl_info.dli_fname); +#endif + +#if (!GLIB_CHECK_VERSION (2, 36, 0)) + g_type_init (); +#endif + +#if defined(_WIN32) || defined(_WIN64) + (void) dwReason; // avoid + (void) lpReserved; // warnings + return TRUE; +#endif +} diff --git a/src/main.vala b/src/main.vala new file mode 100644 index 0000000..b6bcc2b --- /dev/null +++ b/src/main.vala @@ -0,0 +1,39 @@ +using LAview, Core, GObject.Plugins; + +extern const string GETTEXT_PACKAGE; +extern static string so_path; + +/** + * Plugin of type A1. + */ +public class PluginProtocolExample : PluginProtocol { + + /** + * Constructs a new ``PluginProtocolExample``. + */ + construct { + stdout.puts ("PluginProtocolExample init () called\n"); + } + + /** + * Destroys the ``PluginProtocolExample``. + */ + ~PluginProtocolExample () { + stdout.puts ("PluginProtocolExample deinit () called\n"); + } + + /** + * Any abstract method realization for PluginProtocol. + */ + public override string get_readable_name () { + stdout.puts ("PluginProtocolExample.get_readable_name () called\n"); + stdout.puts ("Call IHostCore.any_host_method () from PluginProtocolExample:\n "); + (host as IHostCore).any_host_method (); + return _("Protocol Example"); + } +} + +[ModuleInit] +Type plugin_init (GLib.TypeModule type_module) { + return typeof (PluginProtocolExample); +} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/ui/CMakeLists.txt b/ui/CMakeLists.txt new file mode 100644 index 0000000..fc14716 --- /dev/null +++ b/ui/CMakeLists.txt @@ -0,0 +1 @@ +ADD_SUBDIRECTORY (glade) diff --git a/ui/glade/CMakeLists.txt b/ui/glade/CMakeLists.txt new file mode 100644 index 0000000..019abbb --- /dev/null +++ b/ui/glade/CMakeLists.txt @@ -0,0 +1 @@ +INSTALL (FILES protocol-example.glade DESTINATION "share/laview/protocol-plugins/protocol-example-${MAJOR}/ui") diff --git a/ui/glade/protocol-example.glade b/ui/glade/protocol-example.glade new file mode 100644 index 0000000..e69de29 diff --git a/util/backbone b/util/backbone new file mode 160000 index 0000000..bc270b7 --- /dev/null +++ b/util/backbone @@ -0,0 +1 @@ +Subproject commit bc270b7a0fdbbaec24dbd4af307bda242bed5c2b diff --git a/valadoc_env b/valadoc_env new file mode 100644 index 0000000..73b789a --- /dev/null +++ b/valadoc_env @@ -0,0 +1,2 @@ +BASEDIR=src +PKGS=laview-core-0