134 Commits

Author SHA1 Message Date
Colomban Wendling
5f879126ce Merge pull request #1095 from eht16/issue1076_win32_build_working_dir_locale
Windows: Improve executing external commands on non-ASCII paths,
effectively fixing most known issues.
2016-11-13 16:29:43 +01:00
Enrico Tröger
d61b92f202 Revert "Implement the run helper as a script" on non-Windows
This restores the previous behavior as it has been on non-Windows
systems before.
Post-1.29 we will merge #1300 which implements run helper script support
for non-Windows systems more sophisticated.
2016-11-13 14:55:43 +01:00
Colomban Wendling
f1f577ea72 spawn: Don't depend on utils.h, and fix locale compat on Windows
utils_get_utf8_from_locale() is actually a no-op on Windows, so use the
GLib conversion directly.  We really mean locale here, not "filename
encoding".
2016-11-13 14:55:42 +01:00
Colomban Wendling
1d5d4e278a Implement the run helper as a script
Apparently using arguments instead of putting paths directly in the
script is enough for it to work on Windows, so use a simple script
instead of a program, so it's both shorter and easier to tune.
2016-11-13 14:55:42 +01:00
Colomban Wendling
265e27a7f3 Use a program run helper rather than a script
This removes all encoding issues from passing on a script to cmd.exe on
Windows, as it now uses proper wide character API there.

Not much changes on other OSes, but we don't create temporary scripts
anymore.
2016-11-13 14:55:41 +01:00
Jiří Techet
f95656cbe8 Remove makefile.win32 based build system
No more needed using MSYS2.
2016-07-21 13:21:32 +02:00
Jiří Techet
3d2e7d4fca Move TM into src
Move the tag manager implementation to src as it really is part of Geany
sources and start making the ctags directory structure similar to
the universal-ctags one.

In principle, the patch does

mv tagmanager/src src/tagmanager
mv tagmanager/ctags tagmanager/main
mv tagmanager ctags

plus corresponding Makefile.am and configure.ac updates.
2016-07-21 13:08:42 +02:00
Colomban Wendling
056e53c2c5 Make our convenience libraries more self-contained
Make each convenience library depend on the ones it requires, which is
pretty straightforward for us as they each only depend on a single
other one, avoiding any worry about double linking of static objects.
2016-05-04 19:11:13 +02:00
Thomas Martitz
6098f55032 encodings: move private stuff into private header
encodings.h had a pretty large GEANY_PRIVATE part so it's worthwhile to
separate that into its own header (as per HACKING). What's left is used by the
plugin API.
2015-12-17 09:52:49 +01:00
Dimitar Zhekov
87496f657d Cleanup win32defines
The git PR for this change contains a long explanation.
2015-07-13 19:46:17 +03:00
Enrico Tröger
a54cca738f Install src/spawn.h as it is part of the plugin API 2015-07-12 10:02:56 +02:00
Colomban Wendling
860e3fb12e Merge pull request #550 from b4n/fix-ubuntu-libdir
autotools: Workaround a Ubuntu issue when installing in /usr/local/lib
2015-07-11 14:09:58 +02:00
Thomas Martitz
71ce7c077d win32: Add some window-specifc LDFLAGS to geany itself as well
Since we build libgeany some ld flags were applied to libgeany only.
Some of them need to be applied to the main binary as well.

This fixes the problem that a sticky terminal window starts together
with geany.
2015-07-05 18:28:20 +02:00
Thomas Martitz
2e76e3792e win32: port some defines from win32-config.h & waf to a new win32defines.h
autotools based build system uses only config.h. This file was lacking some
important defines. Rather than maintaining the defines in all build systems,
we can simply define in a specialized header that is included by all .c files
that use windows.h
2015-07-05 18:25:24 +02:00
Colomban Wendling
10e9dd7089 autotools: Workaround a Ubuntu issue when installing in /usr/local/lib
Ubuntu's linker apparently has a bug when installing in /usr/local/lib,
as it is setup in such a way that makes libtool recognize it correctly
as a system path so doesn't add RPATH to our executable, but ld can't
find the library without an explicit ldconfig call (unlike when
installing in /usr/lib).

So, workaround this by explicitly calling ldconfig when installing in
/usr/local/lib -- and when our library is actually not found, to try
and avoid doing something unnecessary on working systems, like e.g.
Debian.
2015-07-05 16:17:55 +02:00
Colomban Wendling
14bcd9c87d Fix binary relocation support 2015-06-26 22:33:16 +02:00
Dimitar Zhekov
d8ad369f8e Merge branch 'master' of https://github.com/geany/geany into spawn
Conflicts:
	src/build.c
	src/tools.c
2015-04-18 12:31:41 +03:00
Jiří Techet
db4bf54b2f Compile prefix.c and osx.c only when needed to avoid warnings
When mac integration or binary relocation are disabled, the compiled
object file contains no symbols because the guards in the source files
hide all code. On OS X there's a warning during compilation saying:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib:
file: .libs/libgeany.a(libgeany_la-prefix.o) has no symbols

If these features are disabled, don't compile the corresponding
sources to avoid the warnings.

Interestingly, waf compilation works without warnings - it appears
linking is done through g++ which doesn't produce these warnings.
2015-04-14 22:21:34 +02:00
Colomban Wendling
b2ba6c84d5 autotools: Cleanup makefile a little 2015-04-10 16:16:19 +02:00
Colomban Wendling
4e02f58847 autotools: Remove useless declaration
There is no need for tricking Automake to use the C++ linker to link
the main executable anymore, this is done for libgeany now.
2015-04-10 16:16:19 +02:00
Colomban Wendling
e61948adbd Fix or remove incorrect comments 2015-04-10 16:16:19 +02:00
Colomban Wendling
56b9189a6c Fix generation of signallist.i with BSD sed
4.2BSD sed doesn't understand the `+` quantifier, so use `{1,}`.
2015-04-10 16:16:18 +02:00
Colomban Wendling
c85b846eeb Simplify automated signal connection
Instead of processing a template C source in the build system, generate
a list to be included by the preprocessor.

This simplifies the build system code as it now only generates the list
and doesn't take care of processing the template.  It incidentally
fixes build on systems with 4.2BSD sed (at least OSX and FreeBSD) as it
removes some offending sed code.
2015-04-10 16:16:18 +02:00
Thomas Martitz
11d4bcf7c2 Only use LIBGEANY_CFLAGS on libgeany.
It includes stuff like -fvisibility which isn't appropriate for the main binary.
2015-04-10 16:16:18 +02:00
Thomas Martitz
616cbe3da9 src: Makefile.am cleanup 2015-04-10 16:08:08 +02:00
Colomban Wendling
9644fb0ae2 Define GEANY_{EXPORT,API}_SYMBOL from the build system
This makes it easier to define it consistently to what the compiler
and platform supports, and avoids having to include a special header
everywhere, which is some kind of a problem for separate libraries
like TagManager and especially Scintilla.

As we only use these macros from the source and not the headers, it
is fine for it to be defined to a configure-time check from the build
system.

Warning: Although Waf and Windows makefiles are updated they are not
         tested an will probably required tuning.
2015-04-10 16:08:08 +02:00
Colomban Wendling
bc013ae9fe Rename LIBGEANY_LIBS to LIBGEANY_LDFLAGS and only use it on libgeany.la
The flags in this variables are used to tune the linker behavior on the
final libgeany (currently set the version information), so should only
used on really linked libraries, not Libtool helper libraries.
2015-03-10 23:16:49 +01:00
Colomban Wendling
361bf702e0 Explicitly cast string literals to non-constant pointers 2015-03-10 23:10:06 +01:00
Matthew Brush
1d64d5211f Replace dynamic exports with codegen for GtkBuilder callbacks
This prevents having to export those callbacks and put them in the
global namespace. Also, use inline shell script in Makefile.am instead
of a Python script which should be more portable (by default) and gets
rid of the helper script.
2015-03-10 23:10:06 +01:00
Matthew Brush
eb36500ac4 Improve Autotools build system for libgeany
Checks if the compiler supports -fvisibility and the linker supports
-dynamic-list arguments and use them instead of hardcoding. The new
geany-lib.m4 also accomodates future use of Libtool versioning.
2015-03-10 23:10:06 +01:00
Matthew Brush
d33758da92 Move Geany's core into a library (libgeany)
This will allow plugins to link against the core when accessing API
functions, now that the macro/struct/funcptr stuff is gone.

Also convert the helper libraries into Libtool helper libraries as
linking a shared library against static libraries is (apparently) not
portable.
2015-03-10 23:09:46 +01:00
Matthew Brush
860df27696 Remove struct/macro/funcptr linkage control for plugin API
Add rest of headers needed for declarations of all public API
functions. Add HAVE_PLUGINS define to geanyplugins.h since some headers
need this and it should always be valid for this header.
geanyfunctions.h left for source-level backwards compatibility for
plugins which might `#include` this header directly. I don't know why
they do it, but some Geany-Plugins do this.
2015-03-10 22:06:47 +01:00
Matthew Brush
2f08670763 Mark all plugin API functions to have "default" (public) visibility
Adds a new header `pluginexport.h` to put the macros in, could be
moved into an existing header (support.h?) by I didn't want to drag
a bunch of existing stuff into the source files for this one macro.

TagManager has relative include, this could be fixed by changing the
include directories for it if it's a problem. Mark the Scintilla
functions exported by re-declaring them in sciwrappers.c with the
attribute to avoid changing upstream Scintilla code.
2015-03-10 22:06:47 +01:00
Matthew Brush
a40ab0a4d9 Explicitly list symbols to dynamically export
Uses a Python script to generate a listing used by the linker to
determine which symbols to dynamically export. This provides finer
grained control of which symbols are dynamically exported, limiting
only to the ones needed for GtkBuilder signal connections.

The build system integration could probably be done a little cleaner.
2015-03-10 22:06:18 +01:00
Dimitar Zhekov
ce0fa6ffa1 Add a spawn module for Geany
g_spawn_async_with_pipes() under Windows has various drawbacks:

- There is no g_shell_parse_argv() for windows. It's not hard to write
  one, but the command line recreated by mscvrt may be wrong.
- GLib converts the argument vector to UNICODE. For non-UTF8 arguments,
  the result is often "Invalid string in argument vector at %d: %s:
  Invalid byte sequence in conversion input" (YMMV). Our tools (make,
  grep, gcc, ...) are "ANSI", so converting to UNICODE and then back
  only causes problems.
- For various reasons, GLib uses an intermediate program to start
  children (see gspawn-win32.c), with the side effect that the
  grandchildren output (such as make -> gcc) is not captured.
- With non-blocking pipes, the g_io_add_watch() callbacks are never
  invoked, while with blocking pipes, g_io_channel_read_line() blocks.
- Some smaller problems, explained in spawn.c as inline comments.

The spawn module tries to fix these problems, and to provide easier
APIs, which guarantee that the callbacks will synchronized as expected,
and g_io_channel_read_line() will not be required, since even under
Unix, it may buffer lines of unlimited length.

This initial commit only adds the module source and header files, and
includes it in the various build systems.

You can see PR 274 for a long discussion about the module.
2015-03-10 21:24:42 +02:00
Jiří Techet
ada4595264 Use global menubar on OS X
We have to disable quartz accelerator handling because otherwise
accelerators are performed also from other windows than the main
Geany editor (e.g. Ctrl+V with find dialog open performs the keybinding
Ctrl+V and inserts the text to the editor).

OS X applications have an extra menu entry to the left of the File menu -
an "application menu". This menu usually contains About, Preferences,
Quit. Many users, however, may be used to Geany from other platforms
and expect Preferences to be under the Edit menu so leave them there.
Quit and About are rarely used and the application menu is the place where
they are supposed to be - move these entries from other Geany menus there
and hide them in the affected menus (the quit entry is inserted automatically,
we just need to hide it from File).

Also tell OS X the Help menu is dedicated to help (we get search in
menu entries by name for free thanks to this).

The global menu should refresh automatically based on user actions.
Unfortunately this is not the case when gtk_menu_reorder_child()
is used because it does not emit any signals so the gtk-mac-integration
library doesn't see this call. Refresh the menu manually after calling
this function.
2015-03-04 12:40:36 +01:00
Jiří Techet
18d517bd95 Use gtk-mac-integration so app bundle can be created on OS X
This patch adds the gtk-mac-integration library and uses it to
adjust various paths in Geany to point it inside the app bundle
if Geany runs from inside the bundle.

It adds the utils_resource_dir() utility function to return
correct directories for various kinds of resources for all supported
operating systems. Using this function the patch adjusts all Geany
resource, plugin, icon, doc, and locale paths.
2015-03-04 12:40:27 +01:00
Colomban Wendling
e6fa2c2ac7 Autotools: Improve the rule to compile Windows resource file 2015-01-20 16:04:55 +01:00
Colomban Wendling
4cc943666f Autotools: MinGW: Fix building .res file in VPATH builds
From a patch by Valentin Kunz, thanks!
Part of https://sourceforge.net/p/geany/patches/17/
2014-11-09 17:40:31 +01:00
Colomban Wendling
1dc09597b2 Fix check for fnmatch and remove strict dependency on it for Windows
Strict dependency on fnmatch was removed in 52076d19e8fe7ab41ebc92928e.

We still have an optional dependency on it from CTags, but I don't
think we use this code, and anyways the checks we had for the optional
path to be taken were incorrect, so it was never actually used.

So, drop the dependency on libibrety for Windows builds, and fix the
remaining checks for an optional fnmatch so if it is found it can
actually be used.
2014-11-09 17:40:03 +01:00
Matthew Brush
4efcbab332 Include what you use
This is a mega-commit - because most of it had to be done in one go
otherwise some commits would fail to compile - that attempts to fix a
few problems with Geany's includes as well as various other related
cleanups. After this change it's easier to use includes and there's
little worry about which order things are included in or who includes
what.

Overview of changes:

* Include config.h at the start of each source file if HAVE_CONFIG_H
  is defined (and never in headers).
* Go through each source file and make the includes section generally
  like this:
  - Always config.h first as above
  - Then if the file has a header with the same name, include that
  - Then include in alphabetical order each other internal/geany header.
  - Then include standard headers
  - Then include non-standard system headers
  - Then include GLib/GTK+ related stuff
* Doing as above makes it easier to find implicit header include
  dependencies and it exposed quite a few weird problems with includes
  or forward declarations, fix those.
* Make geany.h contain not much besides some defines.
  - Add a little header file "app.h" for GeanyApp and move it there
  - Move "app" global to new "app.h" file
  - Move "ignore_callback" global to "callbacks.h"
  - Move "geany_object" global to "geanyobject.h"
* Add an include in "geany.h" for "app.h" since GeanyApp used to be
  defined there and some plugins included this header to access
  GeanyApp.
* Include "gtkcompat.h" everywhere instead of gtk/gtk.h so that
  everywhere sees the same definitions (not a problem in practice AFAIK
  so this could be changed back if better that way.
* Remove forward declarations from previous commits as some people
  apparently consider this bad style, despite that it reduces inter-
  header dependencies.

TODO:
* As always, to test on win32
* As always, to test with not Autotools
* Test plugins better, both builtin and geany-plugins, likely API/ABI bump
* Test with various defines/flags that may change what is included
* win32.[ch] not really touched since I couldn't test
2014-05-21 15:37:19 -07:00
Matthew Brush
23d9cad7dc Start to make it easier to compile the core in isolation
This is for work on making the files scannable by GObject-Introspection
but is still useful otherwise (even fixes a FIXME in the comments). I
made this by using a simple GNU Make file and trying to compile the
sources each on their own without all the build system infrastructure.

* Add keybindingsprivate.h file to hold private GeanyKeyGroup structure
and remove it from the GEANY_PRIVATE guard in keybindings.h.
* Move private members that were guarded by GEANY_PRIVATE from
GeanyFiletypes to GeanyFiletypesPrivate and remove guarded build.h
include.
* Move private members that were guarded by GEANY_PRIVATE from
GeanyProject to GeanyProjectPrivate.
2014-05-21 12:17:59 -07:00
Colomban Wendling
71093fec62 Autotools: replace use of deprecated INCLUDES in favor to AM_CPPFLAGS 2013-03-15 16:48:33 +01:00
Colomban Wendling
8ece89096d Merge branch 'master' into gtk3-support 2013-01-29 15:29:10 +01:00
Colomban Wendling
dabae1f94f Replace images embedded in the sources with proper themable icons
Additionally, provide SVG versions of the icons as well as them
rendered at the various icons sizes.
2013-01-01 19:10:48 +01:00
Colomban Wendling
6409840d4a Get rid of GtkComboBoxEntry API and use GtkComboBoxText API
Use the GtkComboBoxText API and the GtkComboBoxEntry replacement API
and map those to the old equivalents if not available.

This changes the type exposed by ui_combo_box_add_to_history() from
GtkComboBoxEntry to either GtkComboBox (under GTK2) or GtkComboBoxText
(under GTK3).  This should not be too much of an issue since
GtkComboBoxEntry and GtkComboBoxtext are subclasses of GtkComboBox,
but this will still emit warnings when when the calling code passes
a GtkComboBoxEntry pointer to ui_combo_box_add_to_history().

However, this requires the calling code to use the same mapping as we
do (GtkComboBoxText = GtkComboBox on GTK2, even on 2.24), or things
will blow and it'll be hard to understand why.  This wouldn't be an
issue if the calling code includes our gtkcompat.h header everywhere
it deals with combo boxes, which will be the case if it includes the
Geany headers everywhere but probably won't otherwise.  Oh dear.

A possible kind of workaround may be for ui_combo_box_add_to_history()
to do type-checking on its argument and use the actually correct API
for that type.
2012-10-08 20:08:06 +02:00
Colomban Wendling
a763e307f7 Don't access GtkWidget fields directly
Since many accessor are new in GTK versions we don't depend on, add
a header that defines them to the direct access if they aren't
available.
2012-10-08 20:08:06 +02:00
Colomban Wendling
d11f9a51b9 Rely on GModule for adding or not the --export-dynamic linker flag
We explicitly use GModule's .pc since 7b2f0fe, and it provides the
appropriate flag: we don't need to add it ourselves anymore.  Moreover,
since this flag is not needed (nor available) on all platforms (e.g.
Windows or MacOS X), it is safer to let GModule deal with adding it
anyway.
2012-07-17 23:09:00 +02:00
Colomban Wendling
d69a153bb4 Refactor tagmanager source files architecture
Split ctags and tagmanager sources, as follows:

tagmanager/ctags: the parsers, more or less upstream CTags;
tagmanager/mio: local MIO library copy;
tagmanager/src: actual tagmanager sources.
2012-05-08 23:01:23 +02:00
Lex Trotman
33d5378508 Add build.h to list of headers installed (autotools) 2012-02-17 09:26:03 +11:00