Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
John McEleney
/
mailutils
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit
063c3071
...
063c30715d8be4b60fdb384ec7752d3f3035d003
authored
2005-03-13 11:38:41 +0000
by
Sergey Poznyakoff
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Moved from /mailbox
1 parent
8bccb389
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
285 additions
and
0 deletions
config/mailutils-config.c
config/mailutils-config.c
0 → 100644
View file @
063c307
/* GNU Mailutils -- a suite of utilities for electronic mail
Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
GNU Mailutils is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Mailutils is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Mailutils; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <string.h>
#include <mailutils/mailutils.h>
#include <mailutils/argp.h>
#include <mu_asprintf.h>
const
char
*
program_version
=
"mailutils-config ("
PACKAGE_STRING
")"
;
static
char
doc
[]
=
N_
(
"GNU mailutils-config -- Display compiler and loader options needed for building a program with mailutils"
);
static
char
args_doc
[]
=
N_
(
"[arg...]"
);
static
struct
argp_option
options
[]
=
{
{
"compile"
,
'c'
,
NULL
,
0
,
N_
(
"Print C compiler flags to compile with"
),
0
},
{
"link"
,
'l'
,
NULL
,
0
,
N_
(
"Print libraries to link with. Possible arguments are: auth, guile, all, "
"mbox, mh, maildir, imap, pop"
),
0
},
{
"info"
,
'i'
,
NULL
,
0
,
N_
(
"Print a list of configuration options used to build mailutils. If arguments "
"are given, they are interpreted as a list of configuration options to check "
"for. In this case the program prints those options from this list that "
"have been defined. It exits with zero status if all of the "
"specified options are defined. Otherwise, the exit status is 1."
),
0
},
{
0
,
0
,
0
,
0
}
};
enum
config_mode
{
MODE_VOID
,
MODE_COMPILE
,
MODE_LINK
,
MODE_INFO
};
enum
config_mode
mode
;
static
error_t
parse_opt
(
int
key
,
char
*
arg
,
struct
argp_state
*
state
)
{
switch
(
key
)
{
case
'l'
:
mode
=
MODE_LINK
;
break
;
case
'c'
:
mode
=
MODE_COMPILE
;
break
;
case
'i'
:
mode
=
MODE_INFO
;
break
;
default:
return
ARGP_ERR_UNKNOWN
;
}
return
0
;
}
static
struct
argp
argp
=
{
options
,
parse_opt
,
args_doc
,
doc
,
NULL
,
NULL
,
NULL
};
static
const
char
*
argp_capa
[]
=
{
"common"
,
"license"
,
NULL
};
#ifdef WITH_TLS
# define TLSAUTH 1
#else
# define TLSAUTH 0
#endif
struct
lib_descr
{
char
*
name
;
char
*
libname
;
int
needauth
;
}
lib_descr
[]
=
{
{
"mbox"
,
"mu_mbox"
,
0
},
{
"mh"
,
"mu_mh"
,
0
},
{
"maildir"
,
"mu_maildir"
,
0
},
{
"imap"
,
"mu_imap"
,
TLSAUTH
},
{
"pop"
,
"mu_pop"
,
TLSAUTH
},
{
"nntp"
,
"mu_nntp"
,
0
},
{
NULL
}
};
struct
lib_entry
{
int
level
;
char
*
ptr
;
}
lib_entry
[
10
];
int
nentry
;
void
add_entry
(
int
level
,
char
*
ptr
)
{
int
i
;
if
(
nentry
>=
sizeof
(
lib_entry
)
/
sizeof
(
lib_entry
[
0
]))
{
mu_error
(
_
(
"Too many arguments"
));
exit
(
1
);
}
for
(
i
=
0
;
i
<
nentry
;
i
++
)
if
(
strcmp
(
lib_entry
[
i
].
ptr
,
ptr
)
==
0
)
return
;
lib_entry
[
nentry
].
level
=
level
;
lib_entry
[
nentry
].
ptr
=
ptr
;
nentry
++
;
}
/* Sort the entires by their level. */
void
sort_entries
()
{
int
j
;
for
(
j
=
0
;
j
<
nentry
;
j
++
)
{
int
i
;
for
(
i
=
j
;
i
<
nentry
;
i
++
)
if
(
lib_entry
[
j
].
level
>
lib_entry
[
i
].
level
)
{
struct
lib_entry
tmp
;
tmp
=
lib_entry
[
i
];
lib_entry
[
i
]
=
lib_entry
[
j
];
lib_entry
[
j
]
=
tmp
;
}
}
}
int
main
(
int
argc
,
char
**
argv
)
{
int
index
;
mu_argp_init
(
program_version
,
NULL
);
if
(
mu_argp_parse
(
&
argp
,
&
argc
,
&
argv
,
0
,
argp_capa
,
&
index
,
NULL
))
{
argp_help
(
&
argp
,
stdout
,
ARGP_HELP_SEE
,
program_invocation_short_name
);
return
1
;
}
argc
-=
index
;
argv
+=
index
;
switch
(
mode
)
{
case
MODE_VOID
:
break
;
case
MODE_LINK
:
{
int
j
;
char
*
ptr
;
add_entry
(
-
1
,
LINK_FLAGS
);
add_entry
(
100
,
LINK_POSTFLAGS
);
add_entry
(
1
,
"-lmailbox"
);
#ifdef ENABLE_NLS
if
(
sizeof
(
I18NLIBS
)
>
1
)
add_entry
(
10
,
I18NLIBS
);
#endif
for
(
;
argc
>
0
;
argc
--
,
argv
++
)
{
if
(
strcmp
(
argv
[
0
],
"auth"
)
==
0
)
{
add_entry
(
2
,
"-lmuauth "
AUTHLIBS
);
}
#ifdef WITH_GUILE
else
if
(
strcmp
(
argv
[
0
],
"guile"
)
==
0
)
{
add_entry
(
-
1
,
"-lmu_scm "
GUILE_LIBS
);
}
#endif
else
if
(
strcmp
(
argv
[
0
],
"all"
)
==
0
)
{
struct
lib_descr
*
p
;
for
(
p
=
lib_descr
;
p
->
name
;
p
++
)
{
asprintf
(
&
ptr
,
"-l%s"
,
p
->
libname
);
add_entry
(
0
,
ptr
);
if
(
p
->
needauth
)
add_entry
(
2
,
"-lmuauth "
AUTHLIBS
);
}
}
else
{
struct
lib_descr
*
p
;
for
(
p
=
lib_descr
;
p
->
name
;
p
++
)
if
(
strcasecmp
(
p
->
name
,
argv
[
0
])
==
0
)
break
;
if
(
p
->
name
)
{
asprintf
(
&
ptr
,
"-l%s"
,
p
->
libname
);
add_entry
(
0
,
ptr
);
if
(
p
->
needauth
)
add_entry
(
2
,
"-lmuauth "
AUTHLIBS
);
}
else
{
argp_help
(
&
argp
,
stdout
,
ARGP_HELP_USAGE
,
program_invocation_short_name
);
return
1
;
}
}
}
sort_entries
();
/* At least one entry is always present */
printf
(
"%s"
,
lib_entry
[
0
].
ptr
);
/* Print the rest of them separated by a space */
for
(
j
=
1
;
j
<
nentry
;
j
++
)
{
printf
(
" %s"
,
lib_entry
[
j
].
ptr
);
}
printf
(
"
\n
"
);
return
0
;
}
case
MODE_COMPILE
:
if
(
argc
!=
0
)
break
;
printf
(
"%s
\n
"
,
COMPILE_FLAGS
);
return
0
;
case
MODE_INFO
:
if
(
argc
==
0
)
mu_print_options
();
else
{
int
i
,
found
=
0
;
for
(
i
=
0
;
i
<
argc
;
i
++
)
{
const
char
*
val
=
mu_check_option
(
argv
[
i
]);
if
(
val
)
{
found
++
;
printf
(
"%s
\n
"
,
val
);
}
}
return
found
==
argc
?
0
:
1
;
}
return
0
;
}
argp_help
(
&
argp
,
stdout
,
ARGP_HELP_USAGE
,
program_invocation_short_name
);
return
0
;
}
Please
register
or
sign in
to post a comment