Les plugiciels
Les plugiciels sont des fichiers objets partagés (.so sous *nix et .dll sous Windows) pouvant être chargés par LibSass à l'exécution. Actuellement, ils ne proposent qu'un moyen de charger des fonctions internes/personnalisées depuis des plugiciels. À l'avenir, ils ajouteront probablement un moyen de fournir des importateurs personnalisés via des plugiciels (une refactorisation supplémentaire est nécessaire pour prendre en charge plusieurs importateurs avec un système de priorité).
plugin.cpp
- #include <cstring>
- #include <iostream>
- #include <stdint.h>
- #include "sass_values.h"
-
- union Sass_Value* ADDCALL call_fn_foo(const union Sass_Value* s_args, void* cookie)
- {
- // en fait, ils abusent du void* pour entreposer un "int"
- return sass_make_number((intptr_t)cookie, "px");
- }
-
- extern "C" const char* ADDCALL libsass_get_version() {
- return libsass_version();
- }
-
- extern "C" Sass_C_Function_List ADDCALL libsass_load_functions()
- {
- // allouer un appelant de fonction personnalisé
- Sass_C_Function_Callback fn_foo = sass_make_function("foo()", call_fn_foo, (void*)42);
- // créer une liste de toutes les fonctions personnalisées
- Sass_C_Function_List fn_list = sass_make_function_list(1);
- // mettre la seule fonction de ce plugin dans la liste
- sass_function_set_list_entry(fn_list, 0, fn_foo);
- // renvoie la liste
- return fn_list;
- }
Pour compiler le plugiciel, LibSass doit être déjà compilé en tant que bibliothèque partagée (pour pouvoir le lier). Les commandes ci-dessous attendent la bibliothèque partagée dans le sous-répertoire lib (-Llib). Le plugiciel et le processus LibSass principal doivent utiliser la même bibliothèque LibSass partagée à l'exécution. Cela fonctionnera probablement aussi s'ils utilisent des versions différentes de LibSass. Dans ce cas, nous vérifions la compatibilité des versions majeures (par exemple, 3.1.3 et 3.1.1 sont considérées comme compatibles).
Compiler avec gcc sous Linux
g++ -O2 -shared plugin.cpp -o plugin.so -fPIC -Llib -lsass |
Compiler avec MinGW sous Windows
g++ -O2 -shared plugin.cpp -o plugin.dll -Llib -lsass |