about summary refs log tree commit diff stats
path: root/commands
Commit message (Collapse)AuthorAgeFilesLines
* Revert "add close command at global level"Drew DeVault2019-08-134-59/+93
| | | | This reverts commit f0a0c5aa733fa66958c113465bfc5fdd3d7cc9f0.
* add close command at global levelAditya Srivastava2019-08-134-93/+59
|
* Add optional body argument to compose commandDaniel Bridges2019-08-131-3/+14
|
* Joining the args in cf for folders with spacesBen Cohen2019-08-121-1/+5
|
* Ignore scroll command when msgstore is nilJelle Besseling2019-08-121-2/+2
| | | | | | | | | Fixes ~sircmpwn/aerc2#205. Many functions do a nil check on the store, so this changes Store() so it returns nil when msglist is nil. It also places the Scroll() behind the nil check in the next-message command. https://todo.sr.ht/~sircmpwn/aerc2/205
* Let user edit arbitrary headers in composerDaniel Bridges2019-08-121-4/+32
|
* Fix `unread` commandArt Wild2019-08-081-0/+2
| | | | | | | This fixes ~sircmpwn/aerc2#195. While `read -t` works fine. The `unread` command is not wired. This patch fixes it. https://todo.sr.ht/~sircmpwn/aerc2/195
* Implement next-message in msgview using accountJelle Besseling2019-08-072-28/+37
| | | | | This makes sure that the next-message command accepts the same arguments in the account view and the msgview
* Implement next-folder using NextPrev with amountJelle Besseling2019-08-071-6/+4
| | | | | | This fixes ~sircmpwn/aerc2#182 https://todo.sr.ht/~sircmpwn/aerc2/182
* Allow cc/bcc command to receive no argumentsDaniel Bridges2019-08-071-4/+3
|
* cc/bcc: Append to existing headers if called twiceKevin Kuehler2019-08-071-2/+2
| | | | Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
* Fix directory completion case sensitivityBen Burwell2019-08-031-11/+19
| | | | | | Before, lower_only was not being correctly set and was only considering whether the string ended with a lowercase sequence. Refactored this with some more explicit functions as the logic is a little confusing.
* Add cc and bcc commandsDaniel Bridges2019-08-031-0/+39
|
* select next message when deleting from message viewerAditya Srivastava2019-08-021-3/+10
|
* ChangeFolder: do not depend on the msgstoreReto Brunner2019-08-021-6/+6
| | | | | We need to clear the filtering etc upon folder switch. Not having a valid msgstore is however no reason not to switch directories.
* Add filesystem completions for :attach and :cdGalen Abell2019-08-022-2/+24
| | | | | Tab-completions now cycle through filesystem paths when using :attach or :cd commands.
* Add CompletePath methodGalen Abell2019-08-021-0/+91
| | | | | CompletePath takes an existing path and returns possible filesystem completions based on that path.
* Sendmail: allow for arbitrary parametersReto Brunner2019-07-291-1/+11
| | | | Allows the outgoing command to contain arguments and flags
* Add index option to change-tabJeffas2019-07-271-4/+23
| | | | | | | This allows selection of a tab using its index. It attempts to parse the given argument as a number, if it fails then it uses it as a name. Also supports relative indexes using prefixed + or -.
* Add :detach commandGalen Abell2019-07-271-0/+55
| | | | | | | Add a command for removing attachments from a composed message. Syntax is :detach [path], with path being an optional argument specifying the path of one existing attachment. If no path is specified, the first attachment is removed.
* Add missing fallthroughDrew DeVault2019-07-271-0/+2
|
* Implement sendmail supportDrew DeVault2019-07-271-10/+36
|
* Add tab completion to textinputsJeffas2019-07-262-3/+17
| | | | | | | | | | | | | This adds tab completion to textinput components. They can be configured with a completion function. This function is called when the user presses <tab>. The first completion is initially shown to the user inserted into the text. Repeated presses of <tab> or <backtab> cycle through the completions list. The completions list is invalidated when any other non-tab-like key is pressed. Also changed is some logic for current completion generation so that all available commands are returned when <tab> is pressed with no current text and similarly for arguments of commands.
* Add command history and cyclingGalen Abell2019-07-261-0/+62
| | | | | | Aerc will keep track of the previous 1000 commands, which the user can cycle through using the arrow keys while in the ex-line. Pressing up will move backwards in history while pressing down will move forward.
* Support configurable header layout in compose widgetDaniel Bridges2019-07-263-15/+20
|
* Add new-email triggerJeffas2019-07-261-5/+1
| | | | | | | | | | | | | | | | | This patch sets up the trigger config section of aerc.conf. Each trigger has its own function which is called from the place where it is triggered. Currently only the new-email trigger is implemented. The triggers make use of format strings. For instance, in the new-email trigger this allows the user to select the trigger command and also the information extracted from the command and placed into their command. To actually execute the trigger commands the keypresses are simulated. Further triggers can be implemented in the future. Formatting of the command is moved to a new package.
* Fix :close on terminal panicJeffas2019-07-251-1/+0
| | | | | | | | Executing :close on a terminal would panic due to it already having been removed. This is also related to the fact that removing a tab doesn't check for whether it actually found a tab to remove or not.
* Add space which was missingJeffas2019-07-251-1/+1
|
* Add change tab commandJeffas2019-07-231-0/+48
| | | | | | | | | | This command allows the user to change tab by giving the tab name. This can be tab completed too. The previous tab is stored in the tabs module so that when a new tab is created it is still possible to go to the previous one. Normal invocation is :ct folder Previous tab is :ct -
* Implement :filter, :clearKevin Kuehler2019-07-193-9/+61
| | | | Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
* Add :attach command for composeGalen Abell2019-07-191-0/+56
| | | | | | Allow users to add attachments to emails in the Compose view. Syntax is :attach <path>, where path is a valid file. Attachments will show up in the pre-send review screen.
* Add :cp alias for :copyDrew DeVault2019-07-171-1/+1
|
* Add an option to toggle between read and unreadNicolai Dagestad2019-07-171-3/+29
|
* Update status message to include destinationJeffas2019-07-171-1/+1
|
* commands: Don't crash when store is nilKevin Kuehler2019-07-158-4/+28
| | | | | | | On a slow network connection, running these commands without this guard will cause aerc to panic. Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
* 71: Allow user to change config options at runtimePedro L. Ramos2019-07-151-0/+69
| | | | | | | | | There is a LoadConf and a LoadConfFromFile. LoadConfFromFile reads the iniFile into memory and and calls LoadConf, which executes the old parsing commands from LoadConf (old func). The remaining of the LoadConfFromFile is the same as the old OldConf.
* Fix crashes when operating on empty folder (#216)Daniel Bridges2019-07-108-10/+32
|
* Fix :pipe -b actually writing to stdinDrew DeVault2019-07-081-1/+9
|
* Fix re-opening of expired pipe tabsDrew DeVault2019-07-082-3/+11
|
* :exec, :pipe: show exit status on completionDrew DeVault2019-07-082-2/+4
|
* Add :exec and :pipe -b(ackground)Drew DeVault2019-07-082-17/+89
|
* Factor IMAP-specific structs out of UI modelsBen Burwell2019-07-081-15/+13
| | | | | | | Before, we were using several IMAP-specific concepts to represent information being displayed in the UI. Factor these structures out of the IMAP package to make it easier for other backends to provide the required information.
* Make :pipe command more genericDrew DeVault2019-07-055-99/+107
|
* Remove unused caps stringDrew DeVault2019-07-041-2/+0
|
* Add IMAP folder tab completionGregory Mullen2019-07-043-2/+27
| | | | | Credit for this fix goes to Reto; I guess if we're not gonna be mutt we should probabaly do things correctly.
* Crash on delete in empty folder (#213)Zach Sisco2019-07-041-0/+3
|
* Add unsubscribe commandBen Burwell2019-07-042-0/+144
| | | | | | | | | | | | | | | | The unsubscribe command, available when in a message viewer context, enables users to easily unsubscribe from mailing lists. When the command is executed, aerc looks for a List-Unsubscribe header as defined in RFC 2369. If found, aerc will attempt to present the user with a suitable interface for completing the request. Currently, mailto and http(s) URLs are supported. In the case of a HTTP(S) URL, aerc will open the link in a browser. For mailto links, a new composer tab will be opened with a message filled out according to the URL. The message is not sent automatically in order to provide the user a chance to review it first. Closes #101
* Use "open" instead of "xdg-open" on Darwin systemsBen Burwell2019-07-041-3/+2
|
* Implement basic tab completion supportGregory Mullen2019-06-2942-126/+524
| | | | | Tab completion currently only works on commands. Contextual completion will be added in the future.
* Implement :search, :next-result, :prev-resultDrew DeVault2019-06-262-0/+95
|
^
2519e450 ^
dcccfacb ^
2519e450 ^
dcccfacb ^
2519e450 ^
bc8a871a ^
1588106e ^
5b734156 ^
2519e450 ^
2c361644 ^
2519e450 ^

768df4d7 ^



f983438e ^
768df4d7 ^
f983438e ^
768df4d7 ^






2c976d35 ^
7fa9ecc7 ^

dcccfacb ^
b367c848 ^
d3a387a0 ^

b367c848 ^



6e5c9288 ^


0cdbfecb ^
7d857fc3 ^

e361ea69 ^
401ebce8 ^
cf78fac5 ^
8bfb175d ^
900a0451 ^
94f0550c ^

900a0451 ^
94f0550c ^
900a0451 ^
dc0c3cc6 ^
8fd77ea1 ^
e361ea69 ^




8fd77ea1 ^









e361ea69 ^
524b1f23 ^
b5171cb0 ^
f0ffceef ^
b5171cb0 ^











f0ffceef ^
b5171cb0 ^





dcccfacb ^

d2035496 ^

78841f2e ^
dcccfacb ^

d2035496 ^


dcccfacb ^
78841f2e ^
bd1c1394 ^
78841f2e ^
2490c3ed ^
54df2101 ^
2490c3ed ^
f8187382 ^




24ebb512 ^
54df2101 ^


2490c3ed ^

fa89e2aa ^
7e4b1b1d ^
fa89e2aa ^
1dba341d ^
671849c7 ^










1dba341d ^


d2035496 ^

edbc15fa ^
4a5b672f ^
edbc15fa ^
97c66127 ^







f9b2fdc7 ^

bfbc8edc ^
c00ab035 ^
97c66127 ^


b2dfdc75 ^

97c66127 ^

4a5b672f ^

3ceb9b0d ^








718a708b ^


2519e450 ^

dcccfacb ^

28f5cdf7 ^
252c7c2e ^

c5a04de9 ^

8c9aee22 ^
c5a04de9 ^
2c5b4442 ^
2519e450 ^
d28930ea ^
8e0d8d2a ^
11066f20 ^
2519e450 ^
e07da412 ^
dcccfacb ^

4ca6296f ^

7cf8f47f ^
8bfb175d ^
098d84ef ^
8bfb175d ^
3c062438 ^
41fe8c22 ^
3c062438 ^


2519e450 ^
8014e902 ^
2655d9e8 ^


dcccfacb ^

b5171cb0 ^
dcccfacb ^


41fe8c22 ^
dcccfacb ^
3ceb9b0d ^

718a708b ^
dcccfacb ^

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388


                                                                
                                                  
                              
                         

                                 
                                          
                                                                                            
                                                                
 
                        
          
               
 


                
                      
                 

                   
                                     
                                     



                                  
                            










                                                                                 
                                    
                                                  

                                            
 


                                                                         
           

                                                                               

                                                                         



                                                               

                                                              

                                                   
                      
                                                                  
                           
                                                                                        

                                                                               

                                                                                                          
 
           



                                               
                                                




                                                                                                           












                                                                                                  
                                                               



                                               
   
                                    
                                          
    



                                               










                                                                                                                


                                              

  
           
                                                      

                                
                                                       
 
                                                
                                                                              
                                                    
                                                                                                                                         
                                                           
                                                                                                                                                  








                                                                                                                                                      
 

                                            


                         
                        

          







                                                                          
                             
                                         
                                                                                           
                                            
                                                                                            
                                             
                                                
                                                                          
                                          
                          

                                                    



                                                                       
                           
                   
                      






                                 
 

                                                               
 
                            

                                                                      



                                                                         


                                            
                                        

                                                              
 
                                                    
                                                                         
 
                                                   

                                                      
                                                            
                                                                       
                                                                                       
 
                                 




                                                                        









                                                                       
                                                                  
 
                                          
                                   











                                                                                                       
                                                          





                                                                                

                    

                                          
                                                                    

                                                                    


                                                                                 
                                   
                                                                                 
  
 
                                    
                                   
                                 




                                                                 
                                                                                                        


                                                                             

  
                                    
                                     
                                     
                                   










                                                                             


                                                                                      

  
                                      
                                     
                                        







                                                                                             

                                                                                                    
 
                                             


                                               

                                                                                         

                                                                          

  








                                                                                    


                                

                                                                            

                                                                          
 

                                                                                

                                                                                      
                                                                              
                                                                                     
 
                                                                              
                                              
                                     
 
                      
                                                         

                                               

                                                
                                        
                                                                                                                                  
                                                                                                      
                                                                                                                                       
 
                    


                     
                                 
                                             


                           

       
                                


                                       
                                   
                             

                                       
                                   

                                                 
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_INIT([profanity], [0.9.4], [jubalh@iodoru.org])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_HEADERS([src/config.h])
AM_INIT_AUTOMAKE([foreign subdir-objects])
# TODO Introduce with Ruby plugins, see https://github.com/profanity-im/profanity/issues/779
#AX_PREFIX_CONFIG_H([src/prof_config.h], [PROF], [src/config.h])

### Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL

## Check for LFS
AC_SYS_LARGEFILE

### Get canonical host
AC_CANONICAL_HOST
PLATFORM="unknown"
AS_CASE([$host_os],
    [freebsd*], [PLATFORM="freebsd"],
    [openbsd*], [PLATFORM="openbsd"],
    [darwin*], [PLATFORM="osx"],
    [cygwin], [PLATFORM="cygwin"],
    [PLATFORM="nix"])

PACKAGE_STATUS="development"

### Get git branch and revision if in development
if test "x$PACKAGE_STATUS" = xdevelopment; then
    AM_CONDITIONAL([INCLUDE_GIT_VERSION], [true])
    AC_DEFINE([HAVE_GIT_VERSION], [1], [Include git info])
else
    AM_CONDITIONAL([INCLUDE_GIT_VERSION], [false])
fi

AC_DEFINE_UNQUOTED([PACKAGE_STATUS], ["$PACKAGE_STATUS"], [Status of this build])

AS_IF([test "x$PLATFORM" = xcygwin],
    [AC_DEFINE([PLATFORM_CYGWIN], [1], [Cygwin])])
AS_IF([test "x$PLATFORM" = xosx],
    [AC_DEFINE([PLATFORM_OSX], [1], [OSx])])

### Environment variables
AC_ARG_VAR([PYTHON_FRAMEWORK], [Set base directory for Python Framework])

### Options
AC_ARG_ENABLE([notifications],
    [AS_HELP_STRING([--enable-notifications], [enable desktop notifications])])
AC_ARG_ENABLE([python-plugins],
    [AS_HELP_STRING([--enable-python-plugins], [enable Python plugins])])
AC_ARG_ENABLE([c-plugins],
    [AS_HELP_STRING([--enable-c-plugins], [enable C plugins])])
AC_ARG_ENABLE([plugins],
    [AS_HELP_STRING([--enable-plugins], [enable plugins])])
AC_ARG_ENABLE([otr],
    [AS_HELP_STRING([--enable-otr], [enable otr encryption])])
AC_ARG_ENABLE([pgp],
    [AS_HELP_STRING([--enable-pgp], [enable pgp])])
AC_ARG_ENABLE([omemo],
    [AS_HELP_STRING([--enable-omemo], [enable OMEMO encryption])])
AC_ARG_WITH([xscreensaver],
    [AS_HELP_STRING([--with-xscreensaver], [use libXScrnSaver to determine idle time])])
AC_ARG_WITH([themes],
    [AS_HELP_STRING([--with-themes[[=PATH]]], [install themes (default yes)])])
AC_ARG_ENABLE([icons-and-clipboard],
    [AS_HELP_STRING([--enable-icons-and-clipboard], [enable GTK tray icons and clipboard paste support])])

### plugins

# python
if test "x$enable_plugins" = xno; then
    AM_CONDITIONAL([BUILD_PYTHON_API], [false])
elif test "x$enable_python_plugins" != xno; then
    AS_IF([test "x$PLATFORM" = xosx], [
        AS_IF([test "x$PYTHON_FRAMEWORK" = x], [ PYTHON_FRAMEWORK="/Library/Frameworks/Python.framework" ])
        AC_MSG_NOTICE([Symlinking Python.framework to $PYTHON_FRAMEWORK])
        rm -f Python.framework
        ln -s $PYTHON_FRAMEWORK Python.framework ])
    AC_CHECK_PROG(PYTHON_CONFIG_EXISTS, python-config, yes, no)
    if test "$PYTHON_CONFIG_EXISTS" == "yes"; then
        AX_PYTHON_DEVEL
        AM_CONDITIONAL([BUILD_PYTHON_API], [true])
        AC_DEFINE([HAVE_PYTHON], [1], [Python support])
    else
        if test "x$enable_python_plugins" = xyes; then
            AC_MSG_ERROR([Python not found, cannot enable Python plugins.])
        else
            AM_CONDITIONAL([BUILD_PYTHON_API], [false])
            AC_MSG_NOTICE([Python development package not found, Python plugin support disabled.])
        fi
    fi
    AS_IF([test "x$PLATFORM" = xosx], [rm -f Python.framework])
else
    AM_CONDITIONAL([BUILD_PYTHON_API], [false])
fi

# c
if test "x$PLATFORM" = xcygwin; then
    AM_CONDITIONAL([BUILD_C_API], [false])
else
    LT_INIT
    if test "x$enable_plugins" = xno; then
        AM_CONDITIONAL([BUILD_C_API], [false])
    elif test "x$enable_c_plugins" != xno; then
        # libdl doesn't exist as a separate library in OpenBSD/FreeBSD and is
        # provided in the standard libraries.
        AS_IF([test "x$PLATFORM" = xopenbsd -o "x$PLATFORM" = xfreebsd],
            [AM_CONDITIONAL([BUILD_C_API], [true]) AC_DEFINE([HAVE_C], [1], [C support])],
            [AC_CHECK_LIB([dl], [main],
                [AM_CONDITIONAL([BUILD_C_API], [true]) LIBS="$LIBS -ldl" AC_DEFINE([HAVE_C], [1], [C support])],
                [AS_IF(
                    [test "x$enable_c_plugins" = xyes],
                        [AC_MSG_ERROR([dl library needed to run C plugins])],
                    [AM_CONDITIONAL([BUILD_C_API], [false])])
                ])])
    else
        AM_CONDITIONAL([BUILD_C_API], [false])
    fi
fi

# threading
ACX_PTHREAD([], [AC_MSG_ERROR([pthread is required])])
LIBS="$PTHREAD_LIBS $LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
AS_IF([test "x$PTHREAD_CC" != x], [ CC="$PTHREAD_CC" ])

### Check for libmesode, fall back to libstrophe
### TODO libmesode support will be removed in the future, rewrite this section
PKG_CHECK_MODULES([libmesode], [libmesode >= 0.9.3],
    [LIBS="$libmesode_LIBS $LIBS" CFLAGS="$CFLAGS $libmesode_CFLAGS" XMPP_LIB="libmesode" AC_DEFINE([HAVE_LIBMESODE], [1], [libmesode])],
    [PKG_CHECK_MODULES([libstrophe], [libstrophe >= 0.9.3],
        [LIBS="$libstrophe_LIBS $LIBS" CFLAGS="$CFLAGS $libstrophe_CFLAGS" XMPP_LIB="libstrophe" AC_DEFINE([HAVE_LIBSTROPHE], [1], [libstrophe])],
        [XMPP_LIB=""])])
if test "x$XMPP_LIB" = x; then
    PKG_CHECK_MODULES([libmesode], [libmesode >= 0.9.2],
        [LIBS="$libmesode_LIBS $LIBS" CFLAGS="$CFLAGS $libmesode_CFLAGS" XMPP_LIB="libmesode" AC_DEFINE([HAVE_LIBMESODE], [1], [libmesode])],
        [PKG_CHECK_MODULES([libstrophe], [libstrophe >= 0.9.2],
            [LIBS="$libstrophe_LIBS $LIBS" CFLAGS="$CFLAGS $libstrophe_CFLAGS" XMPP_LIB="libstrophe" AC_DEFINE([HAVE_LIBSTROPHE], [1], [libstrophe])],
            [AC_MSG_ERROR([libstrophe-0.9.2 or later is required for profanity])])])
    AC_DEFINE([HAVE_LIBSTROPHE_LT_0_9_3], [1], [Old libstrophe is present])
fi

AC_MSG_CHECKING([whether ${XMPP_LIB} works])
AC_LINK_IFELSE([AC_LANG_SOURCE([[
    #ifdef HAVE_LIBMESODE
    #include <mesode.h>
    #else
    #include <strophe.h>
    #endif

    int main() {
        xmpp_initialize();
        return 0;
    }
    ]])],
    [AC_MSG_RESULT([yes])],
    [AC_MSG_ERROR([${XMPP_LIB} is broken, check config.log for details])])

### Check for ncurses library
PKG_CHECK_MODULES([ncursesw], [ncursesw],
    [NCURSES_CFLAGS="$ncursesw_CFLAGS"; NCURSES_LIBS="$ncursesw_LIBS"; NCURSES="ncursesw"],
    [PKG_CHECK_MODULES([ncurses], [ncurses],
        [NCURSES_CFLAGS="$ncurses_CFLAGS"; NCURSES_LIBS="$ncurses_LIBS"; NCURSES="ncurses"],
        [AC_CHECK_LIB([ncursesw], [main], [],
            [AC_CHECK_LIB([ncurses], [main], [],
            	[AC_MSG_ERROR([ncurses is required for profanity])])])])])
AM_CPPFLAGS="$AM_CPPFLAGS $NCURSES_CFLAGS"
LIBS="$NCURSES_LIBS $LIBS"

### Check wide characters support in ncurses library
CFLAGS_RESTORE="$CFLAGS"
CFLAGS="$CFLAGS $NCURSES_CFLAGS"
AC_CACHE_CHECK([for wget_wch support in $NCURSES], ncurses_cv_wget_wch,
   [AC_LINK_IFELSE([AC_LANG_SOURCE([
       void wget_wch(void);
       int main() {
           wget_wch();
           return 0;
       }
       ])],
       [ncurses_cv_wget_wch=yes],
       [ncurses_cv_wget_wch=no])
   ])
CFLAGS="$CFLAGS_RESTORE"

AS_IF([test "x$ncurses_cv_wget_wch" != xyes],
    [AC_MSG_ERROR([ncurses does not support wide characters])])

### Check for glib libraries
PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.56.0], [],
    [AC_MSG_ERROR([glib 2.56.0 or higher is required for profanity])])
PKG_CHECK_MODULES([gio], [gio-2.0], [],
    [AC_MSG_ERROR([libgio-2.0 from glib-2.0 is required for profanity])])

### Check for other profanity dependencies
AC_SEARCH_LIBS([fmod], [m], [],
   [AC_MSG_ERROR([math.h is required])], [])

PKG_CHECK_MODULES([curl], [libcurl], [],
    [AC_CHECK_LIB([curl], [main], [],
        [AC_MSG_ERROR([libcurl is required for profanity])])])

PKG_CHECK_MODULES([SQLITE], [sqlite3 >= 3.22.0], [],
    [AC_MSG_ERROR([sqlite3 3.22.0 or higher is required for profanity])])

AS_IF([test "x$enable_icons_and_clipboard" != xno],
    [PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10],
        [AC_DEFINE([HAVE_GTK], [1], [libgtk module])],
        [AS_IF([test "x$enable_icons_and_clipboard" = xyes],
            [AC_MSG_ERROR([gtk+-2.0 or higher is required for icons])],
            [AC_MSG_NOTICE([gtk+-2.0 not found, icons and clipboard not enabled])])])])

AS_IF([test "x$PLATFORM" = xosx],
    [AC_CHECK_FILE([/usr/local/opt/readline/lib],
        [LIBS="-lreadline $LIBS"
            AM_CPPFLAGS="-I/usr/local/opt/readline/include $AM_CPPFLAGS"
            AM_LDFLAGS="-L/usr/local/opt/readline/lib $AM_LDFLAGS"
            AC_SUBST(AM_LDFLAGS)],
        [AC_MSG_ERROR([libreadline is required for profanity])])],

      [test "x$PLATFORM" = xopenbsd],
      [AC_CHECK_FILE([/usr/local/include/ereadline],
          [LIBS="-lereadline $LIBS"
              AM_CPPFLAGS="-I/usr/local/include/ereadline $AM_CPPFLAGS"
              AM_LDFLAGS="-L/usr/local/lib $AM_LDFLAGS"
              AC_SUBST(AM_LDFLAGS)])],

    [AC_CHECK_LIB([readline], [main], [],
        [AC_MSG_ERROR([libreadline is required for profanity])])])

### Check for desktop notification support
### Linux/FreeBSD require libnotify
### Windows uses native OS calls
### OSX requires terminal-notifier

AS_IF([test "x$PLATFORM" = xosx],
        [AS_IF([test "x$enable_notifications" != xno],
            [NOTIFIER_PATH="no"
            AC_PATH_PROG(NOTIFIER_PATH, terminal-notifier, no)
            AS_IF([test "x$NOTIFIER_PATH" = xno],
                [AS_IF([test "x$enable_notifications" = xyes],
                    [AC_MSG_ERROR([terminal-notifier not found, required for desktop notifications.])],
                    [AC_MSG_NOTICE([Desktop notifications not supported.])])],
                [AC_DEFINE([HAVE_OSXNOTIFY], [1], [terminal notifier])])])],
    [test "x$PLATFORM" = xnix -o "x$PLATFORM" = xfreebsd],
        [AS_IF([test "x$enable_notifications" != xno],
            [PKG_CHECK_MODULES([libnotify], [libnotify],
                [AC_DEFINE([HAVE_LIBNOTIFY], [1], [libnotify module])],
                [AS_IF([test "x$enable_notifications" = xyes],
                    [AC_MSG_ERROR([libnotify is required but does not exist])],
                    [AC_MSG_NOTICE([libnotify support will be disabled])])])])])

# TODO: rewrite this
if test "x$with_xscreensaver" = xyes; then
    AC_CHECK_LIB([Xss], [main], [],
        [AC_MSG_ERROR([libXss is required for x autoaway support])])
    AC_CHECK_LIB([X11], [main], [],
        [AC_MSG_ERROR([libX11 is required for x autoaway support])])
elif test "x$with_xscreensaver" = x; then
    AC_CHECK_LIB([Xss], [main], [],
        [AC_MSG_NOTICE([libXss not found, falling back to profanity auto-away])])
    AC_CHECK_LIB([X11], [main], [],
        [AC_MSG_NOTICE([libX11 not found, falling back to profanity auto-away])])
fi

AM_CONDITIONAL([BUILD_PGP], [false])
if test "x$enable_pgp" != xno; then
    AC_CHECK_LIB([gpgme], [main],
        [AM_CONDITIONAL([BUILD_PGP], [true])
         AC_DEFINE([HAVE_LIBGPGME], [1], [Have libgpgme])
         AC_PATH_PROG([GPGME_CONFIG], [gpgme-config], ["failed"])
         AS_IF([test "x$GPGME_CONFIG" = xfailed],
            [LIBS="-lgpgme $LIBS"],
            [LIBS="`$GPGME_CONFIG --libs` $LIBS" AM_CPPFLAGS="`$GPGME_CONFIG --cflags` $AM_CPPFLAGS"])],
        [AS_IF([test "x$enable_pgp" = xyes],
            [AC_MSG_ERROR([libgpgme is required for pgp support])],
            [AC_MSG_NOTICE([libgpgme not found, pgp support not enabled])])])
fi

AM_CONDITIONAL([BUILD_OTR], [false])
AM_CONDITIONAL([BUILD_OTR3], [false])
AM_CONDITIONAL([BUILD_OTR4], [false])
if test "x$enable_otr" != xno; then
    AM_CONDITIONAL([BUILD_OTR], [true])
    PKG_CHECK_MODULES([libotr], [libotr >= 4.0],
        [AM_CONDITIONAL([BUILD_OTR4], [true])],
        [AC_MSG_NOTICE([libotr >= 4.0 not found, checking for libotr-3.x...])
         PKG_CHECK_MODULES([libotr], [libotr >= 3.0],
            [AM_CONDITIONAL([BUILD_OTR3], [true])],
            [AM_CONDITIONAL([BUILD_OTR], [false])])])

    AM_COND_IF([BUILD_OTR],
        [LIBS="$libotr_LIBS $LIBS" CFLAGS="$CFLAGS $libotr_CFLAGS"
         AC_DEFINE([HAVE_LIBOTR], [1], [Have libotr])],
        [AS_IF([test "x$enable_otr" = xyes],
            [AC_MSG_ERROR([libotr is required for otr encryption support])],
            [AC_MSG_NOTICE([libotr not found, otr encryption support not enabled])])])
fi

AM_CONDITIONAL([BUILD_OMEMO], [false])
if test "x$enable_omemo" != xno; then
   AM_CONDITIONAL([BUILD_OMEMO], [true])
    PKG_CHECK_MODULES([libsignal], [libsignal-protocol-c >= 2.3.2],
        [LIBS="-lsignal-protocol-c $LIBS"],
        [AC_MSG_NOTICE([libsignal >= 2.3.2 not found, checking for libsignal 2.3.x...])
         PKG_CHECK_MODULES([libsignal], [libsignal-protocol-c >= 2.3.0],
            [LIBS="-lsignal-protocol-c $LIBS"
             AC_DEFINE([HAVE_LIBSIGNAL_LT_2_3_2], [1], [Have libsignal-protocol-c < 2.3.2])],
            [AM_CONDITIONAL([BUILD_OMEMO], [false])
             AS_IF([test "x$enable_omemo" = xyes],
                   [AC_MSG_ERROR([libsignal-protocol-c is required for OMEMO support])],
                   [AC_MSG_NOTICE([libsignal-protocol-c not found, OMEMO support not enabled])])])])

    AC_CHECK_LIB([gcrypt], [gcry_md_extract],
        [LIBS="-lgcrypt $LIBS"],
        [AM_CONDITIONAL([BUILD_OMEMO], [false])
         AS_IF([test "x$enable_omemo" = xyes],
               [AC_MSG_ERROR([gcrypt >= 1.7.0 is required for OMEMO support])],
               [AC_MSG_NOTICE([gcrypt >= 1.7.0 not found, OMEMO support not enabled])])])

   AM_COND_IF([BUILD_OMEMO], [AC_DEFINE([HAVE_OMEMO], [1], [Have OMEMO])])
fi

AS_IF([test "x$with_themes" = xno],
    [THEMES_INSTALL="false"],
    [THEMES_INSTALL="true"])
AS_IF([test "x$with_themes" = xno -o "x$with_themes" = xyes -o "x$with_themes" = x],
    [THEMES_PATH='${pkgdatadir}/themes'],
    [THEMES_PATH="$with_themes"])
AC_SUBST(THEMES_PATH)
AM_CONDITIONAL([THEMES_INSTALL], "$THEMES_INSTALL")

ICONS_PATH='${pkgdatadir}/icons'
AC_SUBST(ICONS_PATH)

### cmocka is required only for tests, profanity shouldn't be linked with it
### TODO: pass cmocka_CFLAGS and cmocka_LIBS to Makefile.am
PKG_CHECK_MODULES([cmocka], [cmocka], [],
    [AC_MSG_NOTICE([cmocka is not found, will not be able to run tests])])

AM_CONDITIONAL([HAVE_STABBER], [false])
AC_CHECK_LIB([stabber], [stbbr_start], [AM_CONDITIONAL([HAVE_STABBER], [true])],
    [AC_MSG_NOTICE([libstabber not found, will not be able to run functional tests])])
AM_CONDITIONAL([HAVE_EXPECT], [false])
AC_CHECK_LIB([expect], [exp_expectl], [AM_CONDITIONAL([HAVE_EXPECT], [true])],
    [AC_MSG_NOTICE([libexpect not found, will not be able to run functional tests])])

### Check for ncursesw/ncurses.h first, Arch linux uses ncurses.h for ncursesw
AC_CHECK_HEADERS([ncursesw/ncurses.h], [], [])
AC_CHECK_HEADERS([ncurses.h], [], [])

### Default parameters
AM_CFLAGS="-Wall -Wno-deprecated-declarations -std=gnu99"
AS_IF([test "x$PACKAGE_STATUS" = xdevelopment],
    [AM_CFLAGS="$AM_CFLAGS -Wunused -Werror"])
AS_IF([test "x$PLATFORM" = xosx],
    [AM_CFLAGS="$AM_CFLAGS -Qunused-arguments"])
AM_LDFLAGS="$AM_LDFLAGS -export-dynamic"
AM_CPPFLAGS="$AM_CPPFLAGS $glib_CFLAGS $gio_CFLAGS $curl_CFLAGS $libnotify_CFLAGS $PYTHON_CPPFLAGS ${GTK_CFLAGS} ${SQLITE_CFLAGS}"
AM_CPPFLAGS="$AM_CPPFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\" -DICONS_PATH=\"\\\"$ICONS_PATH\\\"\""
LIBS="$glib_LIBS $gio_LIBS $curl_LIBS $libnotify_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_LDFLAGS ${GTK_LIBS} ${SQLITE_LIBS} $LIBS"

AC_SUBST(AM_LDFLAGS)
AC_SUBST(AM_CFLAGS)
AC_SUBST(AM_CPPFLAGS)

### Checks for library functions.
AC_CHECK_FUNCS([atexit memset strdup strstr])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

echo ""
echo "PLATFORM       : $host_os"
echo "PACKAGE_STATUS : $PACKAGE_STATUS"
echo "AM_CFLAGS      : $AM_CFLAGS"
echo "AM_CPPFLAGS    : $AM_CPPFLAGS"
echo "AM_LDFLAGS     : $AM_LDFLAGS"
echo "LIBS           : $LIBS"
echo "Install themes : $THEMES_INSTALL"
echo "Themes path    : $THEMES_PATH"
echo "Icons path     : $ICONS_PATH"
echo ""
echo "Now you can run \`make' to build profanity"