mirror of
https://github.com/mirror/make.git
synced 2025-01-27 21:00:22 +08:00
Add requirement for plugin_is_GPL_compatible symbol in loaded objects.
This commit is contained in:
parent
58dae24352
commit
c21c1455fd
@ -1,3 +1,9 @@
|
|||||||
|
2013-05-14 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* doc/make.texi (Loaded Object API): Document the requirement for
|
||||||
|
the plugin_is_GPL_compatible symbol.
|
||||||
|
* load.c (load_object): Check for plugin_is_GPL_compatible symbol.
|
||||||
|
|
||||||
2013-05-13 Paul Smith <psmith@gnu.org>
|
2013-05-13 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* filedef.h (struct file): Add a builtin flag.
|
* filedef.h (struct file): Add a builtin flag.
|
||||||
|
@ -11058,6 +11058,24 @@ functions may make use of the @code{gmk_expand} and @code{gmk_eval}
|
|||||||
routines to perform their tasks, then optionally return a string as
|
routines to perform their tasks, then optionally return a string as
|
||||||
the result of the function expansion.
|
the result of the function expansion.
|
||||||
|
|
||||||
|
@subsubheading Loaded Object Licensing
|
||||||
|
@cindex loaded object licensing
|
||||||
|
@cindex plugin_is_GPL_compatible
|
||||||
|
|
||||||
|
Every dynamic extension should define the global symbol
|
||||||
|
@code{plugin_is_GPL_compatible} to assert that it has been licensed
|
||||||
|
under a GPL-compatible license. If this symbol does not exist,
|
||||||
|
@code{make} emits a fatal error and exits when it tries to load your
|
||||||
|
extension.
|
||||||
|
|
||||||
|
The declared type of the symbol should be @code{int}. It does not need
|
||||||
|
to be in any allocated section, though. The code merely asserts that
|
||||||
|
the symbol exists in the global scope. Something like this is enough:
|
||||||
|
|
||||||
|
@example
|
||||||
|
int plugin_is_GPL_compatible;
|
||||||
|
@end example
|
||||||
|
|
||||||
@subsubheading Data Structures
|
@subsubheading Data Structures
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@ -11185,6 +11203,8 @@ function in a file @file{mk_temp.c}:
|
|||||||
|
|
||||||
#include <gnumake.h>
|
#include <gnumake.h>
|
||||||
|
|
||||||
|
int plugin_is_GPL_compatible;
|
||||||
|
|
||||||
char *
|
char *
|
||||||
gen_tmpfile(const char *nm, int argc, char **argv)
|
gen_tmpfile(const char *nm, int argc, char **argv)
|
||||||
@{
|
@{
|
||||||
|
6
load.c
6
load.c
@ -71,6 +71,12 @@ load_object (const gmk_floc *flocp, int noerror,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Assert that the GPL license symbol is defined. */
|
||||||
|
symp = dlsym (*dlp, "plugin_is_GPL_compatible");
|
||||||
|
if (! symp)
|
||||||
|
fatal (flocp, _("Loaded object %s is not declared to be GPL compatible"),
|
||||||
|
ldname);
|
||||||
|
|
||||||
symp = dlsym (*dlp, symname);
|
symp = dlsym (*dlp, symname);
|
||||||
if (! symp)
|
if (! symp)
|
||||||
fatal (flocp, _("Failed to load symbol %s from %s: %s"),
|
fatal (flocp, _("Failed to load symbol %s from %s: %s"),
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2013-05-14 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
|
* scripts/features/loadapi: Add plugin_is_GPL_compatible symbol.
|
||||||
|
* scripts/features/load: Ditto.
|
||||||
|
|
||||||
2013-05-13 Paul Smith <psmith@gnu.org>
|
2013-05-13 Paul Smith <psmith@gnu.org>
|
||||||
|
|
||||||
* scripts/features/output-sync (output_sync_set): Update for new
|
* scripts/features/output-sync (output_sync_set): Update for new
|
||||||
|
@ -20,6 +20,8 @@ print $F <<'EOF' ;
|
|||||||
|
|
||||||
#include "gnumake.h"
|
#include "gnumake.h"
|
||||||
|
|
||||||
|
int plugin_is_GPL_compatible;
|
||||||
|
|
||||||
int
|
int
|
||||||
testload_gmk_setup (gmk_floc *pos)
|
testload_gmk_setup (gmk_floc *pos)
|
||||||
{
|
{
|
||||||
|
@ -20,6 +20,8 @@ print $F <<'EOF' ;
|
|||||||
|
|
||||||
#include "gnumake.h"
|
#include "gnumake.h"
|
||||||
|
|
||||||
|
int plugin_is_GPL_compatible;
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
test_eval (const char *buf)
|
test_eval (const char *buf)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user