forked from old/legacy-imlib2
color modifiers in imlib2 now done.. cleaned up soem code...
SVN revision: 936
This commit is contained in:
parent
a82425db17
commit
910a509458
78
api.c
78
api.c
|
@ -3,6 +3,7 @@
|
|||
#include <X11/extensions/shape.h>
|
||||
#include <string.h>
|
||||
#include "common.h"
|
||||
#include "colormod.h"
|
||||
#include "scale.h"
|
||||
#include "image.h"
|
||||
#include "context.h"
|
||||
|
@ -528,7 +529,7 @@ imlib_create_scaled_image_from_drawable(Display *display,
|
|||
char domask = 0, tmpmask = 0;
|
||||
int x, xx;
|
||||
XGCValues gcv;
|
||||
GC gc, mgc;
|
||||
GC gc = 0, mgc = 0;
|
||||
Pixmap p, m;
|
||||
|
||||
if ((mask) || (get_mask_from_shape))
|
||||
|
@ -1157,3 +1158,78 @@ imlib_flush_font_cache(void)
|
|||
{
|
||||
__imlib_purge_font_cache();
|
||||
}
|
||||
|
||||
Imlib_Color_Modifier
|
||||
imlib_create_color_modifier(void)
|
||||
{
|
||||
return (Imlib_Color_Modifier)__imlib_CreateCmod();
|
||||
}
|
||||
|
||||
void
|
||||
imlib_free_color_modifier(Imlib_Color_Modifier color_modifier)
|
||||
{
|
||||
__imlib_FreeCmod((ImlibColorModifier *)color_modifier);
|
||||
}
|
||||
|
||||
void
|
||||
imlib_modify_color_modifier_gamma(Imlib_Color_Modifier color_modifier,
|
||||
double gamma_value)
|
||||
{
|
||||
__imlib_CmodModGamma((ImlibColorModifier *)color_modifier,
|
||||
gamma_value);
|
||||
}
|
||||
|
||||
void
|
||||
imlib_modify_color_modifier_brightness(Imlib_Color_Modifier color_modifier,
|
||||
double brightness_value)
|
||||
{
|
||||
__imlib_CmodModBrightness((ImlibColorModifier *)color_modifier,
|
||||
brightness_value);
|
||||
}
|
||||
|
||||
void
|
||||
imlib_modify_color_modifier_contrast(Imlib_Color_Modifier color_modifier,
|
||||
double contrast_value)
|
||||
{
|
||||
__imlib_CmodModContrast((ImlibColorModifier *)color_modifier,
|
||||
contrast_value);
|
||||
}
|
||||
|
||||
void
|
||||
imlib_set_color_modifier_tables(Imlib_Color_Modifier color_modifier,
|
||||
DATA8 *red_table,
|
||||
DATA8 *green_table,
|
||||
DATA8 *blue_table,
|
||||
DATA8 *alpha_table)
|
||||
{
|
||||
__imlib_CmodSetTables((ImlibColorModifier *)color_modifier,
|
||||
red_table, green_table, blue_table, alpha_table);
|
||||
}
|
||||
|
||||
void
|
||||
imlib_get_color_modifier_tables(Imlib_Color_Modifier color_modifier,
|
||||
DATA8 *red_table,
|
||||
DATA8 *green_table,
|
||||
DATA8 *blue_table,
|
||||
DATA8 *alpha_table)
|
||||
{
|
||||
__imlib_CmodGetTables((ImlibColorModifier *)color_modifier,
|
||||
red_table, green_table, blue_table, alpha_table);
|
||||
}
|
||||
|
||||
void
|
||||
imlib_rset_color_modifier(Imlib_Color_Modifier color_modifier)
|
||||
{
|
||||
__imlib_CmodReset((ImlibColorModifier *)color_modifier);
|
||||
}
|
||||
|
||||
void
|
||||
imlib_apply_color_modifier(Imlib_Image image,
|
||||
Imlib_Color_Modifier color_modifier)
|
||||
{
|
||||
ImlibImage *im;
|
||||
|
||||
CAST_IMAGE(im, image);
|
||||
__imlib_DataCmodApply(im->data, im->w, im->h, 0,
|
||||
(ImlibColorModifier *)color_modifier);
|
||||
}
|
||||
|
|
82
api.h
82
api.h
|
@ -16,25 +16,6 @@ typedef void * Imlib_Font;
|
|||
typedef struct _imlib_border Imlib_Border;
|
||||
typedef struct _imlib_color Imlib_Color;
|
||||
typedef struct _imlib_rectangle Imlib_Rectangle;
|
||||
typedef enum _imlib_operation Imlib_Operation;
|
||||
typedef enum _imlib_load_error Imlib_Load_Error;
|
||||
typedef enum _imlib_text_direction Imlib_Text_Direction;
|
||||
|
||||
|
||||
struct _imlib_border
|
||||
{
|
||||
int left, right, top, bottom;
|
||||
};
|
||||
|
||||
struct _imlib_color
|
||||
{
|
||||
int alpha, red, green, blue;
|
||||
};
|
||||
|
||||
struct _imlib_rectangle
|
||||
{
|
||||
int x, y, width, height;
|
||||
};
|
||||
|
||||
enum _imlib_operation
|
||||
{
|
||||
|
@ -69,6 +50,25 @@ enum _imlib_load_error
|
|||
IMLIB_LOAD_ERROR_UNKNOWN
|
||||
};
|
||||
|
||||
typedef enum _imlib_operation Imlib_Operation;
|
||||
typedef enum _imlib_load_error Imlib_Load_Error;
|
||||
typedef enum _imlib_text_direction Imlib_Text_Direction;
|
||||
|
||||
struct _imlib_border
|
||||
{
|
||||
int left, right, top, bottom;
|
||||
};
|
||||
|
||||
struct _imlib_color
|
||||
{
|
||||
int alpha, red, green, blue;
|
||||
};
|
||||
|
||||
struct _imlib_rectangle
|
||||
{
|
||||
int x, y, width, height;
|
||||
};
|
||||
|
||||
typedef void (*Imlib_Progress_Function)(Imlib_Image *im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h);
|
||||
|
@ -289,6 +289,30 @@ int imlib_get_font_cache_size(void);
|
|||
void imlib_set_font_cache_size(int bytes);
|
||||
void imlib_flush_font_cache(void);
|
||||
|
||||
/* image modification - color */
|
||||
Imlib_Color_Modifier imlib_create_color_modifier(void);
|
||||
void imlib_free_color_modifier(Imlib_Color_Modifier color_modifier);
|
||||
void imlib_modify_color_modifier_gamma(Imlib_Color_Modifier color_modifier,
|
||||
double gamma_value);
|
||||
void imlib_modify_color_modifier_brightness(Imlib_Color_Modifier color_modifier,
|
||||
double brightness_value);
|
||||
void imlib_modify_color_modifier_contrast(Imlib_Color_Modifier color_modifier,
|
||||
double contrast_value);
|
||||
void imlib_set_color_modifier_tables(Imlib_Color_Modifier color_modifier,
|
||||
DATA8 *red_table,
|
||||
DATA8 *green_table,
|
||||
DATA8 *blue_table,
|
||||
DATA8 *alpha_table);
|
||||
void imlib_get_color_modifier_tables(Imlib_Color_Modifier color_modifier,
|
||||
DATA8 *red_table,
|
||||
DATA8 *green_table,
|
||||
DATA8 *blue_table,
|
||||
DATA8 *alpha_table);
|
||||
void imlib_rset_color_modifier(Imlib_Color_Modifier color_modifier);
|
||||
void imlib_apply_color_modifier(Imlib_Image image,
|
||||
Imlib_Color_Modifier color_modifier);
|
||||
|
||||
|
||||
#if 0
|
||||
void imlib_image_copy_alpha_to_image(Imlib_Image image_source,
|
||||
Imlib_Image image_destination,
|
||||
|
@ -337,24 +361,4 @@ int imlib_get_character_index_and_location_in_text(Imlib_font font,
|
|||
void imlib_save_image(Imlib_Image image, char *filename);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* do this later as none of the color lookup code is in the rendering */
|
||||
/* backend yet */
|
||||
/* image modification - color */
|
||||
Imlib_Color_Modifier imlib_create_color_modifier(void);
|
||||
void imlib_free_color_modifier(Imlib_Color_Modifier color_modifier);
|
||||
void imlib_set_color_modifier_gamma(Imlib_Color_Modifier color_modifier,
|
||||
double gamma_value);
|
||||
void imlib_set_color_modifier_brightness(Imlib_Color_Modifier color_modifier,
|
||||
double brightness_value);
|
||||
void imlib_set_color_modifier_contrast(Imlib_Color_Modifier color_modifier,
|
||||
double contrast_value);
|
||||
void imlib_set_color_modifier_tables(Imlib_Color_Modifier color_modifier,
|
||||
DATA8 *red_table,
|
||||
DATA8 *green_table,
|
||||
DATA8 *blue_table);
|
||||
void imlib_apply_color_modifier(Imlib_Image image,
|
||||
Imlib_Color_Modifier color_modifier);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
753
blend.c
753
blend.c
|
@ -1,5 +1,6 @@
|
|||
#include "common.h"
|
||||
#include <X11/Xlib.h>
|
||||
#include "colormod.h"
|
||||
#include "image.h"
|
||||
#include "blend.h"
|
||||
#include "scale.h"
|
||||
|
@ -46,6 +47,72 @@ __imlib_BlendRGBAToData(DATA32 *src, int src_w, int src_h, DATA32 *dst,
|
|||
h = dst_h - dy;
|
||||
if ((w <= 0) || (h <= 0))
|
||||
return;
|
||||
if (cm)
|
||||
{
|
||||
switch(op)
|
||||
{
|
||||
case OP_COPY:
|
||||
if (dalpha == 0)
|
||||
__imlib_BlendRGBAToRGBCmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 1)
|
||||
__imlib_BlendRGBAToRGBACmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 2)
|
||||
__imlib_CopyRGBAToRGBCmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 3)
|
||||
__imlib_CopyRGBAToRGBACmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
break;
|
||||
case OP_ADD:
|
||||
if (dalpha == 0)
|
||||
__imlib_AddBlendRGBAToRGBCmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 1)
|
||||
__imlib_AddBlendRGBAToRGBACmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 2)
|
||||
__imlib_AddCopyRGBAToRGBCmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 3)
|
||||
__imlib_AddCopyRGBAToRGBACmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
break;
|
||||
case OP_SUBTRACT:
|
||||
if (dalpha == 0)
|
||||
__imlib_SubBlendRGBAToRGBCmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 1)
|
||||
__imlib_SubBlendRGBAToRGBACmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 2)
|
||||
__imlib_SubCopyRGBAToRGBCmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 3)
|
||||
__imlib_SubCopyRGBAToRGBACmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
break;
|
||||
case OP_RESHADE:
|
||||
if (dalpha == 0)
|
||||
__imlib_ReBlendRGBAToRGBCmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 1)
|
||||
__imlib_ReBlendRGBAToRGBACmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 2)
|
||||
__imlib_ReCopyRGBAToRGBCmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
else if (dalpha == 3)
|
||||
__imlib_ReCopyRGBAToRGBACmod(src + (sy * src_w) + sx, src_w - w,
|
||||
dst + (dy * dst_w) + dx, dst_w - w, w, h, cm);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(op)
|
||||
{
|
||||
case OP_COPY:
|
||||
|
@ -108,6 +175,7 @@ __imlib_BlendRGBAToData(DATA32 *src, int src_w, int src_h, DATA32 *dst,
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* COPY OPS */
|
||||
|
||||
|
@ -705,6 +773,691 @@ __imlib_ReCopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* COLORMOD COPY OPS */
|
||||
|
||||
void
|
||||
__imlib_BlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
if (a == 255)
|
||||
*p2 = *p1;
|
||||
else if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGB(cm, r, g, b);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = (r - rr) * a;
|
||||
nr = rr + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (g - gg) * a;
|
||||
ng = gg + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (b - bb) * a;
|
||||
nb = bb + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_BlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
if (a == 255)
|
||||
*p2 = *p1;
|
||||
else if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGB(cm, r, g, b);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = (r - rr) * a;
|
||||
nr = rr + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (g - gg) * a;
|
||||
ng = gg + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (b - bb) * a;
|
||||
nb = bb + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_CopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
DATA8 r, g, b, a;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
a = (*p2 >> 24) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGB(cm, r, g, b);
|
||||
|
||||
*p2 = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
p2++;
|
||||
p1++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_CopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
DATA8 r, g, b, a;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
*p2 = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
p2++;
|
||||
p1++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* COLORMOD ADD OPS */
|
||||
|
||||
void
|
||||
__imlib_AddBlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_AddBlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_AddCopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGB(cm, r, g, b);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + r;
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = gg + g;
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = bb + b;
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (*p2 & 0xff000000) | (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_AddCopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGB(cm, r, g, b);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + r;
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = gg + g;
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = bb + b;
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* COLORMOD SUBTRACT OPS */
|
||||
|
||||
void
|
||||
__imlib_SubBlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_SubBlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_SubCopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGB(cm, r, g, b);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr - r;
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - g;
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - b;
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
*p2 = (*p2 & 0xff000000) | (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_SubCopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGB(cm, r, g, b);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr - r;
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - g;
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - b;
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* COLORMOD RESHADE OPS */
|
||||
|
||||
void
|
||||
__imlib_ReBlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_ReBlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_ReCopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGB(cm, r, g, b);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r - 127) << 1);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
tmp = gg + ((g - 127) << 1);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
tmp = bb + ((b - 127) << 1);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
*p2 = (*p2 & 0xff000000) | (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_ReCopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p1, *p2;
|
||||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
p2 = dst + (y * (w + dst_jump));
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGB(cm, r, g, b);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r - 127) << 1);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
tmp = gg + ((g - 127) << 1);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
tmp = bb + ((b - 127) << 1);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 8));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define LINESIZE 16
|
||||
#define CLIP(x, y, w, h, xx, yy, ww, hh) \
|
||||
|
|
58
blend.h
58
blend.h
|
@ -1,8 +1,6 @@
|
|||
#ifndef __BLEND
|
||||
#define __BLEND 1
|
||||
|
||||
typedef enum _imlibop ImlibOp;
|
||||
|
||||
enum _imlibop
|
||||
{
|
||||
OP_COPY,
|
||||
|
@ -11,6 +9,8 @@ enum _imlibop
|
|||
OP_RESHADE
|
||||
};
|
||||
|
||||
typedef enum _imlibop ImlibOp;
|
||||
|
||||
void
|
||||
__imlib_BlendImageToImage(ImlibImage *im_src, ImlibImage *im_dst,
|
||||
char aa, char blend, char merge_alpha,
|
||||
|
@ -70,4 +70,58 @@ __imlib_ReCopyRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
void
|
||||
__imlib_ReCopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_BlendRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_BlendRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_BlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_BlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_CopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_CopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_AddBlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_AddBlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_AddCopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_AddCopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_SubBlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_SubBlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_SubCopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_SubCopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_ReBlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_ReBlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_ReCopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
void
|
||||
__imlib_ReCopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h, ImlibColorModifier *cm);
|
||||
#endif
|
||||
|
|
201
colormod.c
201
colormod.c
|
@ -1 +1,202 @@
|
|||
#include "common.h"
|
||||
#include "colormod.h"
|
||||
#include "file.h"
|
||||
#include "loaderpath.h"
|
||||
#include <X11/Xlib.h>
|
||||
#include <math.h>
|
||||
#include "image.h"
|
||||
|
||||
static DATABIG mod_count = 0;
|
||||
|
||||
ImlibColorModifier *
|
||||
__imlib_CreateCmod(void)
|
||||
{
|
||||
ImlibColorModifier *cm;
|
||||
int i;
|
||||
|
||||
cm = malloc(sizeof(ImlibColorModifier));
|
||||
cm->modification_count = mod_count;
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
cm->red_mapping[i] = (DATA8)i;
|
||||
cm->green_mapping[i] = (DATA8)i;
|
||||
cm->blue_mapping[i] = (DATA8)i;
|
||||
cm->alpha_mapping[i] = (DATA8)i;
|
||||
}
|
||||
return cm;
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_FreeCmod(ImlibColorModifier *cm)
|
||||
{
|
||||
free(cm);
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_CmodChanged(ImlibColorModifier *cm)
|
||||
{
|
||||
mod_count++;
|
||||
cm->modification_count = mod_count;
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_CmodSetTables(ImlibColorModifier *cm,
|
||||
DATA8 *r, DATA8 *g, DATA8 *b, DATA8 *a)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
if (r)
|
||||
cm->red_mapping[i] = r[i];
|
||||
if (g)
|
||||
cm->green_mapping[i] = g[i];
|
||||
if (b)
|
||||
cm->blue_mapping[i] = b[i];
|
||||
if (a)
|
||||
cm->alpha_mapping[i] = a[i];
|
||||
}
|
||||
__imlib_CmodChanged(cm);
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_CmodReset(ImlibColorModifier *cm)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
cm->red_mapping[i] = (DATA8)i;
|
||||
cm->green_mapping[i] = (DATA8)i;
|
||||
cm->blue_mapping[i] = (DATA8)i;
|
||||
cm->alpha_mapping[i] = (DATA8)i;
|
||||
}
|
||||
__imlib_CmodChanged(cm);
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_DataCmodApply(DATA32 *data, int w, int h, int jump,
|
||||
ImlibColorModifier *cm)
|
||||
{
|
||||
int x, y;
|
||||
DATA32 *p;
|
||||
DATA8 r, g, b, a;
|
||||
|
||||
p = data;
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
b = (*p ) & 0xff;
|
||||
g = (*p >> 8 ) & 0xff;
|
||||
r = (*p >> 16) & 0xff;
|
||||
a = (*p >> 24) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
*p = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
p++;
|
||||
}
|
||||
p += jump;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_CmodGetTables(ImlibColorModifier *cm, DATA8 *r, DATA8 *g,
|
||||
DATA8 *b, DATA8 *a)
|
||||
{
|
||||
if (r)
|
||||
memcpy(r, cm->red_mapping, (256 * sizeof(DATA8)));
|
||||
if (g)
|
||||
memcpy(g, cm->green_mapping, (256 * sizeof(DATA8)));
|
||||
if (b)
|
||||
memcpy(b, cm->blue_mapping, (256 * sizeof(DATA8)));
|
||||
if (a)
|
||||
memcpy(a, cm->alpha_mapping, (256 * sizeof(DATA8)));
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_CmodModBrightness(ImlibColorModifier *cm, double v)
|
||||
{
|
||||
int i, val, val2;
|
||||
|
||||
val = (int)(v * 255);
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
val2 = (int)cm->red_mapping[i] + val;
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->red_mapping[i] = (DATA8)val2;
|
||||
|
||||
val2 = (int)cm->green_mapping[i] + val;
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->green_mapping[i] = (DATA8)val2;
|
||||
|
||||
val2 = (int)cm->blue_mapping[i] + val;
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->blue_mapping[i] = (DATA8)val2;
|
||||
|
||||
val2 = (int)cm->alpha_mapping[i] + val;
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->alpha_mapping[i] = (DATA8)val2;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_CmodModContrast(ImlibColorModifier *cm, double v)
|
||||
{
|
||||
int i, val2;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
val2 = (int)(((double)cm->red_mapping[i] - 127) * v) + 127;
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->red_mapping[i] = (DATA8)val2;
|
||||
|
||||
val2 = (int)(((double)cm->green_mapping[i] - 127) * v) + 127;
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->green_mapping[i] = (DATA8)val2;
|
||||
|
||||
val2 = (int)(((double)cm->blue_mapping[i] - 127) * v) + 127;
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->blue_mapping[i] = (DATA8)val2;
|
||||
|
||||
val2 = (int)(((double)cm->alpha_mapping[i] - 127) * v) + 127;
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->alpha_mapping[i] = (DATA8)val2;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_CmodModGamma(ImlibColorModifier *cm, double v)
|
||||
{
|
||||
int i, val2;
|
||||
|
||||
if (v < 0.01)
|
||||
v = 0.01;
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
val2 = (int)(pow(((double)cm->red_mapping[i] / 255), (1 / v)) * 255);
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->red_mapping[i] = (DATA8)val2;
|
||||
|
||||
val2 = (int)(pow(((double)cm->green_mapping[i] / 255), (1 / v)) * 255);
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->green_mapping[i] = (DATA8)val2;
|
||||
|
||||
val2 = (int)(pow(((double)cm->blue_mapping[i] / 255), (1 / v)) * 255);
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->blue_mapping[i] = (DATA8)val2;
|
||||
|
||||
val2 = (int)(pow(((double)cm->alpha_mapping[i] / 255), (1 / v)) * 255);
|
||||
if (val2 < 0) val2 = 0; if (val2 > 255) val2 = 255;
|
||||
cm->alpha_mapping[i] = (DATA8)val2;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
void
|
||||
__imlib_ImageCmodApply(ImlibImage *im, ImlibColorModifier *cm)
|
||||
{
|
||||
__imlib_DataCmodApply(im->data, im->w, im->h, 0, cm);
|
||||
}
|
||||
#endif
|
||||
|
|
41
colormod.h
41
colormod.h
|
@ -1,3 +1,44 @@
|
|||
#ifndef __COLORMOD
|
||||
#define __COLORMOD 1
|
||||
|
||||
typedef struct _imlib_color_modifier ImlibColorModifier;
|
||||
|
||||
struct _imlib_color_modifier
|
||||
{
|
||||
DATA8 red_mapping[256];
|
||||
DATA8 green_mapping[256];
|
||||
DATA8 blue_mapping[256];
|
||||
DATA8 alpha_mapping[256];
|
||||
DATABIG modification_count;
|
||||
};
|
||||
|
||||
#define CMOD_APPLY_RGB(cm, r, g, b) \
|
||||
(r) = (cm)->red_mapping[(int)(r)]; \
|
||||
(g) = (cm)->green_mapping[(int)(g)]; \
|
||||
(b) = (cm)->blue_mapping[(int)(b)];
|
||||
|
||||
#define CMOD_APPLY_RGBA(cm, r, g, b, a) \
|
||||
(r) = (cm)->red_mapping[(int)(r)]; \
|
||||
(g) = (cm)->green_mapping[(int)(g)]; \
|
||||
(b) = (cm)->blue_mapping[(int)(b)]; \
|
||||
(a) = (cm)->alpha_mapping[(int)(a)];
|
||||
|
||||
ImlibColorModifier * __imlib_CreateCmod(void);
|
||||
void __imlib_FreeCmod(ImlibColorModifier *cm);
|
||||
void __imlib_CmodChanged(ImlibColorModifier *cm);
|
||||
void __imlib_CmodSetTables(ImlibColorModifier *cm, DATA8 *r,
|
||||
DATA8 *g, DATA8 *b, DATA8 *a);
|
||||
void __imlib_CmodReset(ImlibColorModifier *cm);
|
||||
void __imlib_DataCmodApply(DATA32 *data, int w, int h,
|
||||
int jump,
|
||||
ImlibColorModifier *cm);
|
||||
|
||||
void __imlib_CmodGetTables(ImlibColorModifier *cm, DATA8 *r,
|
||||
DATA8 *g, DATA8 *b, DATA8 *a);
|
||||
void __imlib_CmodModBrightness(ImlibColorModifier *cm,
|
||||
double v);
|
||||
void __imlib_CmodModContrast(ImlibColorModifier *cm,
|
||||
double v);
|
||||
void __imlib_CmodModGamma(ImlibColorModifier *cm,
|
||||
double v);
|
||||
#endif
|
||||
|
|
9
common.h
9
common.h
|
@ -4,16 +4,11 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
/*
|
||||
|
||||
#define DATABIG unsigned long long
|
||||
#define DATA64 unsigned long long
|
||||
#define DATA32 unsigned int
|
||||
#define DATA16 unsigned short
|
||||
#define DATA8 unsigned char
|
||||
*/
|
||||
|
||||
#define DATA64 u_int64_t
|
||||
#define DATA32 u_int32_t
|
||||
#define DATA16 u_int16_t
|
||||
#define DATA8 u_int8_t
|
||||
|
||||
#endif
|
||||
|
|
1
draw.c
1
draw.c
|
@ -1,6 +1,7 @@
|
|||
#include <X11/Xlib.h>
|
||||
#include <X11/extensions/XShm.h>
|
||||
#include "common.h"
|
||||
#include "colormod.h"
|
||||
#include "image.h"
|
||||
#include "blend.h"
|
||||
#include "rend.h"
|
||||
|
|
4
font.c
4
font.c
|
@ -1,10 +1,12 @@
|
|||
#include "common.h"
|
||||
#include <X11/Xlib.h>
|
||||
#include "colormod.h"
|
||||
#include "image.h"
|
||||
#include "blend.h"
|
||||
#include <freetype.h>
|
||||
#include "font.h"
|
||||
#include <sys/types.h>
|
||||
#include <string.h>
|
||||
#include "file.h"
|
||||
#include "rgbadraw.h"
|
||||
|
||||
|
@ -668,7 +670,7 @@ __imlib_list_fonts(int *num_ret)
|
|||
}
|
||||
|
||||
void
|
||||
__imlib_free_font_list(char *list, int num)
|
||||
__imlib_free_font_list(char **list, int num)
|
||||
{
|
||||
__imlib_FileFreeDirList(list, num);
|
||||
}
|
||||
|
|
2
font.h
2
font.h
|
@ -41,7 +41,7 @@ void __imlib_render_str(ImlibImage *im, ImlibFont *fn, int drx,
|
|||
int __imlib_char_pos(ImlibFont *fn, char *text, int x, int y,
|
||||
int *cx, int *cy, int *cw, int *ch);
|
||||
char **__imlib_list_fonts(int *num_ret);
|
||||
void __imlib_free_font_list(char *list, int num);
|
||||
void __imlib_free_font_list(char **list, int num);
|
||||
int __imlib_get_cached_font_size(void);
|
||||
void __imlib_flush_font_cache(void);
|
||||
void __imlib_purge_font_cache(void);
|
||||
|
|
1
grab.c
1
grab.c
|
@ -36,6 +36,7 @@ __imlib_GrabDrawableToRGBA(DATA32 *data, int ox, int oy, int ow, int oh,
|
|||
DATA8 rtab[256], gtab[256], btab[256];
|
||||
XColor cols[256];
|
||||
|
||||
/* FIXME: oh isnt used - i wonder if there's a bug looming... */
|
||||
origx = x;
|
||||
origy = y;
|
||||
origw = w;
|
||||
|
|
11
image.c
11
image.c
|
@ -239,7 +239,7 @@ ImlibImagePixmap *
|
|||
__imlib_FindCachedImagePixmap(ImlibImage *im, int w, int h, Display *d, Visual *v,
|
||||
int depth, int sx, int sy, int sw, int sh, Colormap cm,
|
||||
char aa, char hiq, char dmask,
|
||||
long long modification_count)
|
||||
DATABIG modification_count)
|
||||
{
|
||||
ImlibImagePixmap *ip, *previous_ip;
|
||||
|
||||
|
@ -561,7 +561,7 @@ __imlib_FindBestLoaderForFile(char *file)
|
|||
/* use the file extension for a "best guess" as to what loader to try */
|
||||
/* first at any rate */
|
||||
extension = strdup(__imlib_FileExtension(file));
|
||||
/* change the extensiont o all lwoer case as all "types" are listed as */
|
||||
/* change the extensiont o all lower case as all "types" are listed as */
|
||||
/* lower case strings fromt he loader that represent all the possible */
|
||||
/* extensions that file format could have */
|
||||
lower = extension;
|
||||
|
@ -587,20 +587,27 @@ __imlib_FindBestLoaderForFile(char *file)
|
|||
{
|
||||
int i;
|
||||
|
||||
/* go through all the formats that loader supports */
|
||||
for (i = 0; i < l->num_formats; i++)
|
||||
{
|
||||
/* does it match ? */
|
||||
if (!strcmp(l->formats[i], extension))
|
||||
{
|
||||
/* free the memory allocated for the extension */
|
||||
free(extension);
|
||||
/* return the loader */
|
||||
return l;
|
||||
}
|
||||
}
|
||||
l = l->next;
|
||||
}
|
||||
/* free the memory allocated for the extension */
|
||||
free(extension);
|
||||
/* return the loader */
|
||||
return l;
|
||||
}
|
||||
|
||||
/* set or unset the alpha flag on the umage (alpha = 1 / 0 ) */
|
||||
void
|
||||
__imlib_SetImageAlphaFlag(ImlibImage *im, char alpha)
|
||||
{
|
||||
|
|
16
image.h
16
image.h
|
@ -3,13 +3,10 @@
|
|||
|
||||
#include "ltdl.h" /* for lt_dlhandle definition */
|
||||
|
||||
typedef enum _iflags ImlibImageFlags;
|
||||
typedef struct _imlibimage ImlibImage;
|
||||
typedef struct _imlibimagepixmap ImlibImagePixmap;
|
||||
typedef struct _imlibborder ImlibBorder;
|
||||
typedef struct _imlibloader ImlibLoader;
|
||||
typedef struct _imlib_color_modifier ImlibColorModifier;
|
||||
typedef enum _load_error ImlibLoadError;
|
||||
|
||||
enum _load_error
|
||||
{
|
||||
|
@ -39,13 +36,8 @@ enum _iflags
|
|||
F_DONT_FREE_DATA = (1 << 5)
|
||||
};
|
||||
|
||||
struct _imlib_color_modifier
|
||||
{
|
||||
DATA8 red_mapping[256];
|
||||
DATA8 green_mapping[256];
|
||||
DATA8 blue_mapping[256];
|
||||
long long modification_count;
|
||||
};
|
||||
typedef enum _iflags ImlibImageFlags;
|
||||
typedef enum _load_error ImlibLoadError;
|
||||
|
||||
struct _imlibborder
|
||||
{
|
||||
|
@ -80,7 +72,7 @@ struct _imlibimagepixmap
|
|||
ImlibImage *image;
|
||||
char dirty;
|
||||
int references;
|
||||
long long modification_count;
|
||||
DATABIG modification_count;
|
||||
ImlibImagePixmap *next;
|
||||
};
|
||||
|
||||
|
@ -119,7 +111,7 @@ ImlibImagePixmap *__imlib_FindCachedImagePixmap(ImlibImage *im, int w, int h,
|
|||
int depth, int sx, int sy,
|
||||
int sw, int sh, Colormap cm,
|
||||
char aa, char hiq, char dmask,
|
||||
long long modification_count);
|
||||
DATABIG modification_count);
|
||||
void __imlib_AddImagePixmapToCache(ImlibImagePixmap *ip);
|
||||
void __imlib_RemoveImagePixmapFromCache(ImlibImagePixmap *ip);
|
||||
void __imlib_CleanupImagePixmapCache(void);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# A brief demonstration of using Automake with Libtool. -*-Makefile-*-
|
||||
#
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
AUTOMAKE_OPTIONS = no-dependencies foreign
|
||||
|
||||
if INSTALL_LTDL
|
||||
|
@ -20,6 +20,25 @@ libltdl_la_LIBADD = $(LIBADD_DL)
|
|||
libltdlc_la_SOURCES = ltdl.c
|
||||
libltdlc_la_LIBADD = $(LIBADD_DL)
|
||||
|
||||
## Because we do not have automatic dependency tracking:
|
||||
ltdl.lo: ltdl.h config.h
|
||||
|
||||
$(OBJECTS): libtool
|
||||
libtool: $(LIBTOOL_DEPS)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
## This allows us to install libltdl without using ln and without creating
|
||||
## a world writeable directory.
|
||||
## FIXME: Removed this rule once automake can do this properly by itself.
|
||||
local-install-files: $(DISTFILES)
|
||||
-rm -rf $(DESTDIR)$(datadir)/libtool/libltdl
|
||||
$(mkinstalldirs) $(DESTDIR)$(datadir)/libtool/libltdl
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(DESTDIR)$(datadir)/libtool/libltdl/$$file; \
|
||||
else \
|
||||
test -f $(DESTDIR)$(datadir)/libtool/libltdl/$$file \
|
||||
|| cp -p $$d/$$file $(DESTDIR)$(datadir)/libtool/libltdl/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
|
|
|
@ -10,9 +10,6 @@
|
|||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
# A brief demonstration of using Automake with Libtool. -*-Makefile-*-
|
||||
#
|
||||
|
||||
|
||||
SHELL = @SHELL@
|
||||
|
||||
|
@ -73,9 +70,9 @@ LN_S = @LN_S@
|
|||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
NM = @NM@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
PACKAGE = @PACKAGE@
|
||||
RANLIB = @RANLIB@
|
||||
USE_SYMBOL_UNDERSCORE = @USE_SYMBOL_UNDERSCORE@
|
||||
VERSION = @VERSION@
|
||||
|
||||
AUTOMAKE_OPTIONS = no-dependencies foreign
|
||||
|
@ -115,8 +112,8 @@ CCLD = $(CC)
|
|||
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
|
||||
HEADERS = $(include_HEADERS) $(noinst_HEADERS)
|
||||
|
||||
DIST_COMMON = README ./stamp-h.in Makefile.am Makefile.in acinclude.m4 \
|
||||
aclocal.m4 config.h.in configure configure.in
|
||||
DIST_COMMON = README ./stamp-h.in COPYING.LIB Makefile.am Makefile.in \
|
||||
acconfig.h acinclude.m4 aclocal.m4 config.h.in configure configure.in
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
@ -159,7 +156,7 @@ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in
|
|||
rm -f $(srcdir)/stamp-h.in; \
|
||||
$(MAKE) $(srcdir)/stamp-h.in; \
|
||||
else :; fi
|
||||
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
@echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
|
||||
|
||||
|
@ -433,10 +430,25 @@ mostlyclean-generic distclean-generic clean-generic \
|
|||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
|
||||
|
||||
ltdl.lo: ltdl.h config.h
|
||||
|
||||
$(OBJECTS): libtool
|
||||
libtool: $(LIBTOOL_DEPS)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
local-install-files: $(DISTFILES)
|
||||
-rm -rf $(DESTDIR)$(datadir)/libtool/libltdl
|
||||
$(mkinstalldirs) $(DESTDIR)$(datadir)/libtool/libltdl
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(DESTDIR)$(datadir)/libtool/libltdl/$$file; \
|
||||
else \
|
||||
test -f $(DESTDIR)$(datadir)/libtool/libltdl/$$file \
|
||||
|| cp -p $$d/$$file $(DESTDIR)$(datadir)/libtool/libltdl/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*-
|
||||
## Copyright (C) 1996-1999 Free Software Foundation, Inc.
|
||||
## Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||
## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
|
@ -21,7 +21,7 @@
|
|||
## configuration script generated by Autoconf, you may include it under
|
||||
## the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# serial 35 AC_PROG_LIBTOOL
|
||||
# serial 40 AC_PROG_LIBTOOL
|
||||
AC_DEFUN(AC_PROG_LIBTOOL,
|
||||
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
|
||||
|
||||
|
@ -30,8 +30,9 @@ AC_CACHE_SAVE
|
|||
|
||||
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
||||
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
||||
LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
|
||||
DLLTOOL="$DLLTOOL" AS="$AS" \
|
||||
LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
|
||||
LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
|
||||
DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
|
||||
${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
|
||||
$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
|
||||
|| AC_MSG_ERROR([libtool configure failed])
|
||||
|
@ -62,25 +63,24 @@ AC_REQUIRE([AC_PROG_RANLIB])dnl
|
|||
AC_REQUIRE([AC_PROG_CC])dnl
|
||||
AC_REQUIRE([AC_PROG_LD])dnl
|
||||
AC_REQUIRE([AC_PROG_NM])dnl
|
||||
AC_REQUIRE([AC_SYS_NM_PARSE])dnl
|
||||
AC_REQUIRE([AC_SYS_SYMBOL_UNDERSCORE])dnl
|
||||
AC_REQUIRE([AC_PROG_LN_S])dnl
|
||||
dnl
|
||||
|
||||
# Check for any special flags to pass to ltconfig.
|
||||
#
|
||||
# the following will cause an existing older ltconfig to fail, so
|
||||
# we ignore this at the expense of the cache file... Checking this
|
||||
# will just take longer ... bummer!
|
||||
#libtool_flags="--cache-file=$cache_file"
|
||||
#
|
||||
libtool_flags="--cache-file=$cache_file"
|
||||
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
|
||||
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
|
||||
test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
|
||||
test "$lt_dlopen" = yes && libtool_flags="$libtool_flags --enable-dlopen"
|
||||
test "$silent" = yes && libtool_flags="$libtool_flags --silent"
|
||||
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
|
||||
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
|
||||
ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
|
||||
[libtool_flags="$libtool_flags --enable-dlopen"])
|
||||
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
|
||||
[libtool_flags="$libtool_flags --enable-win32-dll"])
|
||||
AC_ARG_ENABLE(libtool-lock,
|
||||
[ --disable-libtool-lock avoid locking (might break parallel builds)])
|
||||
test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
|
||||
test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
|
||||
|
||||
# Some flags need to be propagated to the compiler or linker for good
|
||||
# libtool support.
|
||||
|
@ -116,33 +116,28 @@ case "$host" in
|
|||
fi
|
||||
;;
|
||||
|
||||
*-*-cygwin*)
|
||||
AC_SYS_LIBTOOL_CYGWIN
|
||||
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
|
||||
[*-*-cygwin* | *-*-mingw*)
|
||||
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||
AC_CHECK_TOOL(AS, as, false)
|
||||
AC_CHECK_TOOL(OBJDUMP, objdump, false)
|
||||
;;
|
||||
|
||||
])
|
||||
esac
|
||||
|
||||
# enable the --disable-libtool-lock switch
|
||||
|
||||
AC_ARG_ENABLE(libtool-lock,
|
||||
[ --disable-libtool-lock force libtool not to do file locking],
|
||||
need_locks=$enableval,
|
||||
need_locks=yes)
|
||||
|
||||
if test x"$need_locks" = xno; then
|
||||
libtool_flags="$libtool_flags --disable-lock"
|
||||
fi
|
||||
])
|
||||
|
||||
# AC_LIBTOOL_DLOPEN - check for dlopen support
|
||||
AC_DEFUN(AC_LIBTOOL_DLOPEN, [lt_dlopen=yes])
|
||||
# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
|
||||
AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
|
||||
|
||||
# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
|
||||
AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
|
||||
|
||||
# AC_ENABLE_SHARED - implement the --enable-shared flag
|
||||
# Usage: AC_ENABLE_SHARED[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AC_ENABLE_SHARED,
|
||||
[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_SHARED, [dnl
|
||||
define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(shared,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
|
||||
|
@ -167,15 +162,15 @@ enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
|
|||
])
|
||||
|
||||
# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
|
||||
AC_DEFUN(AC_DISABLE_SHARED,
|
||||
[AC_ENABLE_SHARED(no)])
|
||||
AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_SHARED(no)])
|
||||
|
||||
# AC_ENABLE_STATIC - implement the --enable-static flag
|
||||
# Usage: AC_ENABLE_STATIC[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AC_ENABLE_STATIC,
|
||||
[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_STATIC, [dnl
|
||||
define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(static,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
|
||||
|
@ -200,16 +195,16 @@ enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
|
|||
])
|
||||
|
||||
# AC_DISABLE_STATIC - set the default static flag to --disable-static
|
||||
AC_DEFUN(AC_DISABLE_STATIC,
|
||||
[AC_ENABLE_STATIC(no)])
|
||||
AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_STATIC(no)])
|
||||
|
||||
|
||||
# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
|
||||
# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AC_ENABLE_FAST_INSTALL,
|
||||
[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
|
||||
define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(fast-install,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
|
||||
|
@ -234,9 +229,8 @@ enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
|
|||
])
|
||||
|
||||
# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
|
||||
AC_DEFUN(AC_DISABLE_FAST_INSTALL,
|
||||
[AC_ENABLE_FAST_INSTALL(no)])
|
||||
|
||||
AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_FAST_INSTALL(no)])
|
||||
|
||||
# AC_PROG_LD - find the path to the GNU or non-GNU linker
|
||||
AC_DEFUN(AC_PROG_LD,
|
||||
|
@ -254,7 +248,7 @@ if test "$ac_cv_prog_gcc" = yes; then
|
|||
case "$ac_prog" in
|
||||
# Accept absolute paths.
|
||||
changequote(,)dnl
|
||||
/* | [A-Za-z]:[\\/]*)
|
||||
[\\/]* | [A-Za-z]:[\\/]*)
|
||||
re_direlt='/[^/][^/]*/\.\./'
|
||||
changequote([,])dnl
|
||||
# Canonicalize the path of ld
|
||||
|
@ -280,10 +274,10 @@ else
|
|||
fi
|
||||
AC_CACHE_VAL(ac_cv_path_LD,
|
||||
[if test -z "$LD"; then
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||
for ac_dir in $PATH; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f "$ac_dir/$ac_prog"; then
|
||||
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
|
||||
ac_cv_path_LD="$ac_dir/$ac_prog"
|
||||
# Check to see if the program is GNU ld. I'd rather use --version,
|
||||
# but apparently some GNU ld's only accept -v.
|
||||
|
@ -328,10 +322,10 @@ AC_CACHE_VAL(ac_cv_path_NM,
|
|||
# Let the user override the test.
|
||||
ac_cv_path_NM="$NM"
|
||||
else
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f $ac_dir/nm; then
|
||||
if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
|
||||
# Check to see if the nm accepts a BSD-compat flag.
|
||||
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||
# nm: unknown option "B" ignored
|
||||
|
@ -355,227 +349,22 @@ AC_MSG_RESULT([$NM])
|
|||
AC_SUBST(NM)
|
||||
])
|
||||
|
||||
# AC_SYS_NM_PARSE - Check for command to grab the raw symbol name followed
|
||||
# by C symbol name from nm.
|
||||
AC_DEFUN(AC_SYS_NM_PARSE,
|
||||
# AC_CHECK_LIBM - check for math library
|
||||
AC_DEFUN(AC_CHECK_LIBM,
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
AC_REQUIRE([AC_PROG_NM])dnl
|
||||
# Check for command to grab the raw symbol name followed by C symbol from nm.
|
||||
AC_MSG_CHECKING([command to parse $NM output])
|
||||
AC_CACHE_VAL(ac_cv_sys_global_symbol_pipe,
|
||||
[# These are sane defaults that work on at least a few old systems.
|
||||
# {They come from Ultrix. What could be older than Ultrix?!! ;)}
|
||||
|
||||
changequote(,)dnl
|
||||
# Character class describing NM global symbol codes.
|
||||
ac_symcode='[BCDEGRST]'
|
||||
|
||||
# Regexp to match symbols that can be accessed directly from C.
|
||||
ac_sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
|
||||
|
||||
# Transform the above into a raw symbol and a C symbol.
|
||||
ac_symxfrm='\1 \2\3 \3'
|
||||
|
||||
# Transform an extracted symbol line into a proper C declaration
|
||||
ac_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
||||
|
||||
# Define system-specific variables.
|
||||
case "$host_os" in
|
||||
aix*)
|
||||
ac_symcode='[BCDT]'
|
||||
LIBM=
|
||||
case "$host" in
|
||||
*-*-beos* | *-*-cygwin*)
|
||||
# These system don't have libm
|
||||
;;
|
||||
cygwin* | mingw*)
|
||||
ac_symcode='[ABCDGISTW]'
|
||||
*-ncr-sysv4.3*)
|
||||
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
|
||||
AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
|
||||
;;
|
||||
hpux*)
|
||||
ac_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
||||
;;
|
||||
irix*)
|
||||
ac_symcode='[BCDEGRST]'
|
||||
;;
|
||||
solaris*)
|
||||
ac_symcode='[BDT]'
|
||||
*)
|
||||
AC_CHECK_LIB(m, main, LIBM="-lm")
|
||||
;;
|
||||
esac
|
||||
|
||||
# If we're using GNU nm, then use its standard symbol codes.
|
||||
if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
|
||||
ac_symcode='[ABCDGISTW]'
|
||||
fi
|
||||
changequote([,])dnl
|
||||
|
||||
# Try without a prefix undercore, then with it.
|
||||
for ac_symprfx in "" "_"; do
|
||||
|
||||
ac_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($ac_symcode\)[ ][ ]*\($ac_symprfx\)$ac_sympat$/$ac_symxfrm/p'"
|
||||
|
||||
# Check to see that the pipe works correctly.
|
||||
ac_pipe_works=no
|
||||
rm -f conftest.$ac_ext
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
char nm_test_var;
|
||||
void nm_test_func(){}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
int main(){nm_test_var='a';nm_test_func;return 0;}
|
||||
EOF
|
||||
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
# Now try to grab the symbols.
|
||||
ac_nlist=conftest.nm
|
||||
|
||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
||||
|
||||
# Try sorting and uniquifying the output.
|
||||
if sort "$ac_nlist" | uniq > "$ac_nlist"T; then
|
||||
mv -f "$ac_nlist"T "$ac_nlist"
|
||||
else
|
||||
rm -f "$ac_nlist"T
|
||||
fi
|
||||
|
||||
# Make sure that we snagged all the symbols we need.
|
||||
if egrep ' nm_test_var$' "$ac_nlist" >/dev/null; then
|
||||
if egrep ' nm_test_func$' "$ac_nlist" >/dev/null; then
|
||||
cat <<EOF > conftest.c
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
EOF
|
||||
# Now generate the symbol file.
|
||||
eval "$ac_global_symbol_to_cdecl"' < "$ac_nlist" >> conftest.c'
|
||||
|
||||
cat <<EOF >> conftest.c
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# define lt_ptr_t void *
|
||||
#else
|
||||
# define lt_ptr_t char *
|
||||
# define const
|
||||
#endif
|
||||
|
||||
/* The mapping between symbol names and symbols. */
|
||||
const struct {
|
||||
const char *name;
|
||||
lt_ptr_t address;
|
||||
}
|
||||
changequote(,)dnl
|
||||
lt_preloaded_symbols[] =
|
||||
changequote([,])dnl
|
||||
{
|
||||
EOF
|
||||
sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$ac_nlist" >> conftest.c
|
||||
cat <<\EOF >> conftest.c
|
||||
{0, (lt_ptr_t) 0}
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
EOF
|
||||
# Now try linking the two files.
|
||||
mv conftest.$ac_objext conftestm.$ac_objext
|
||||
ac_save_LIBS="$LIBS"
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
LIBS="conftestm.$ac_objext"
|
||||
CFLAGS="$CFLAGS$no_builtin_flag"
|
||||
if AC_TRY_EVAL(ac_link) && test -s conftest; then
|
||||
ac_pipe_works=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&AC_FD_CC
|
||||
cat conftest.c >&AC_FD_CC
|
||||
fi
|
||||
LIBS="$ac_save_LIBS"
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
else
|
||||
echo "cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "cannot find nm_test_var in $ac_nlist" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "$progname: failed program was:" >&AC_FD_CC
|
||||
cat conftest.c >&AC_FD_CC
|
||||
fi
|
||||
rm -rf conftest*
|
||||
|
||||
# Do not use the global_symbol_pipe unless it works.
|
||||
if test "$ac_pipe_works" = yes; then
|
||||
if test x"$ac_symprfx" = x"_"; then
|
||||
ac_cv_sys_symbol_underscore=yes
|
||||
else
|
||||
ac_cv_sys_symbol_underscore=no
|
||||
fi
|
||||
break
|
||||
else
|
||||
ac_cv_sys_global_symbol_pipe=
|
||||
fi
|
||||
done
|
||||
])
|
||||
|
||||
ac_result=yes
|
||||
if test -z "$ac_cv_sys_global_symbol_pipe"; then
|
||||
ac_result=no
|
||||
fi
|
||||
AC_MSG_RESULT($ac_result)
|
||||
])
|
||||
|
||||
# AC_SYS_LIBTOOL_CYGWIN - find tools needed on cygwin
|
||||
AC_DEFUN(AC_SYS_LIBTOOL_CYGWIN,
|
||||
[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||
AC_CHECK_TOOL(AS, as, false)
|
||||
])
|
||||
|
||||
# AC_SYS_SYMBOL_UNDERSCORE - does the compiler prefix global symbols
|
||||
# with an underscore?
|
||||
AC_DEFUN(AC_SYS_SYMBOL_UNDERSCORE,
|
||||
[AC_REQUIRE([AC_PROG_NM])dnl
|
||||
AC_REQUIRE([AC_SYS_NM_PARSE])dnl
|
||||
AC_MSG_CHECKING([for _ prefix in compiled symbols])
|
||||
AC_CACHE_VAL(ac_cv_sys_symbol_underscore,
|
||||
[ac_cv_sys_symbol_underscore=no
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
void nm_test_func(){}
|
||||
int main(){nm_test_func;return 0;}
|
||||
EOF
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
# Now try to grab the symbols.
|
||||
ac_nlist=conftest.nm
|
||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
||||
# See whether the symbols have a leading underscore.
|
||||
if egrep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
|
||||
ac_cv_sys_symbol_underscore=yes
|
||||
else
|
||||
if egrep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
|
||||
:
|
||||
else
|
||||
echo "configure: cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "configure: cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "configure: failed program was:" >&AC_FD_CC
|
||||
cat conftest.c >&AC_FD_CC
|
||||
fi
|
||||
rm -rf conftest*
|
||||
])
|
||||
AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
|
||||
USE_SYMBOL_UNDERSCORE=${ac_cv_sys_symbol_underscore=no}
|
||||
AC_SUBST(USE_SYMBOL_UNDERSCORE)dnl
|
||||
])
|
||||
|
||||
# AC_CHECK_LIBM - check for math library
|
||||
AC_DEFUN(AC_CHECK_LIBM, [
|
||||
AC_CHECK_LIB(mw, _mwvalidcheckl)
|
||||
AC_CHECK_LIB(m, cos)
|
||||
])
|
||||
|
||||
# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
|
||||
|
@ -586,13 +375,14 @@ AC_CHECK_LIB(m, cos)
|
|||
# '${top_builddir}/' (note the single quotes!) if your package is not
|
||||
# flat, and, if you're not using automake, define top_builddir as
|
||||
# appropriate in the Makefiles.
|
||||
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
|
||||
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
case "$enable_ltdl_convenience" in
|
||||
no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
|
||||
"") enable_ltdl_convenience=yes
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
|
||||
esac
|
||||
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
|
||||
INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
|
||||
])
|
||||
|
||||
# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
|
||||
|
@ -604,16 +394,23 @@ AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
|
|||
# flat, and, if you're not using automake, define top_builddir as
|
||||
# appropriate in the Makefiles.
|
||||
# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
|
||||
AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [
|
||||
AC_CHECK_LIB(ltdl, main, LIBLTDL="-lltdl", [
|
||||
case "$enable_ltdl_install" in
|
||||
no) AC_MSG_WARN([libltdl not installed, but installation disabled]) ;;
|
||||
"") enable_ltdl_install=yes
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-install" ;;
|
||||
esac
|
||||
AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_CHECK_LIB(ltdl, main,
|
||||
[test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
|
||||
[if test x"$enable_ltdl_install" = xno; then
|
||||
AC_MSG_WARN([libltdl not installed, but installation disabled])
|
||||
else
|
||||
enable_ltdl_install=yes
|
||||
fi
|
||||
])
|
||||
if test x"$enable_ltdl_install" != x"no"; then
|
||||
if test x"$enable_ltdl_install" = x"yes"; then
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-install"
|
||||
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
|
||||
INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
|
||||
else
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
|
||||
LIBLTDL="-lltdl"
|
||||
INCLTDL=
|
||||
fi
|
||||
])
|
||||
|
||||
|
@ -625,6 +422,6 @@ AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
|
|||
AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
|
||||
AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
|
||||
AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
|
||||
AC_DEFUN(AM_SYS_NM_PARSE, [indir([AC_SYS_NM_PARSE])])dnl
|
||||
AC_DEFUN(AM_SYS_SYMBOL_UNDERSCORE, [indir([AC_SYS_SYMBOL_UNDERSCORE])])dnl
|
||||
AC_DEFUN(AM_SYS_LIBTOOL_CYGWIN, [indir([AC_SYS_LIBTOOL_CYGWIN])])dnl
|
||||
|
||||
dnl This is just to silence aclocal about the macro not being used
|
||||
ifelse([AC_DISABLE_FAST_INSTALL])dnl
|
||||
|
|
|
@ -11,7 +11,7 @@ dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|||
dnl PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
# serial 35 AC_PROG_LIBTOOL
|
||||
# serial 40 AC_PROG_LIBTOOL
|
||||
AC_DEFUN(AC_PROG_LIBTOOL,
|
||||
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
|
||||
|
||||
|
@ -20,8 +20,9 @@ AC_CACHE_SAVE
|
|||
|
||||
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
||||
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
||||
LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
|
||||
DLLTOOL="$DLLTOOL" AS="$AS" \
|
||||
LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
|
||||
LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
|
||||
DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
|
||||
${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
|
||||
$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
|
||||
|| AC_MSG_ERROR([libtool configure failed])
|
||||
|
@ -52,8 +53,6 @@ AC_REQUIRE([AC_PROG_RANLIB])dnl
|
|||
AC_REQUIRE([AC_PROG_CC])dnl
|
||||
AC_REQUIRE([AC_PROG_LD])dnl
|
||||
AC_REQUIRE([AC_PROG_NM])dnl
|
||||
AC_REQUIRE([AC_SYS_NM_PARSE])dnl
|
||||
AC_REQUIRE([AC_SYS_SYMBOL_UNDERSCORE])dnl
|
||||
AC_REQUIRE([AC_PROG_LN_S])dnl
|
||||
dnl
|
||||
|
||||
|
@ -62,10 +61,16 @@ libtool_flags="--cache-file=$cache_file"
|
|||
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
|
||||
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
|
||||
test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
|
||||
test "$lt_dlopen" = yes && libtool_flags="$libtool_flags --enable-dlopen"
|
||||
test "$silent" = yes && libtool_flags="$libtool_flags --silent"
|
||||
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
|
||||
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
|
||||
ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
|
||||
[libtool_flags="$libtool_flags --enable-dlopen"])
|
||||
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
|
||||
[libtool_flags="$libtool_flags --enable-win32-dll"])
|
||||
AC_ARG_ENABLE(libtool-lock,
|
||||
[ --disable-libtool-lock avoid locking (might break parallel builds)])
|
||||
test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
|
||||
test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
|
||||
|
||||
# Some flags need to be propagated to the compiler or linker for good
|
||||
# libtool support.
|
||||
|
@ -101,33 +106,28 @@ case "$host" in
|
|||
fi
|
||||
;;
|
||||
|
||||
*-*-cygwin*)
|
||||
AC_SYS_LIBTOOL_CYGWIN
|
||||
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
|
||||
[*-*-cygwin* | *-*-mingw*)
|
||||
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||
AC_CHECK_TOOL(AS, as, false)
|
||||
AC_CHECK_TOOL(OBJDUMP, objdump, false)
|
||||
;;
|
||||
|
||||
])
|
||||
esac
|
||||
|
||||
# enable the --disable-libtool-lock switch
|
||||
|
||||
AC_ARG_ENABLE(libtool-lock,
|
||||
[ --disable-libtool-lock force libtool not to do file locking],
|
||||
need_locks=$enableval,
|
||||
need_locks=yes)
|
||||
|
||||
if test x"$need_locks" = xno; then
|
||||
libtool_flags="$libtool_flags --disable-lock"
|
||||
fi
|
||||
])
|
||||
|
||||
# AC_LIBTOOL_DLOPEN - check for dlopen support
|
||||
AC_DEFUN(AC_LIBTOOL_DLOPEN, [lt_dlopen=yes])
|
||||
# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
|
||||
AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
|
||||
|
||||
# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
|
||||
AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
|
||||
|
||||
# AC_ENABLE_SHARED - implement the --enable-shared flag
|
||||
# Usage: AC_ENABLE_SHARED[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AC_ENABLE_SHARED,
|
||||
[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_SHARED, [dnl
|
||||
define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(shared,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
|
||||
|
@ -152,15 +152,15 @@ enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
|
|||
])
|
||||
|
||||
# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
|
||||
AC_DEFUN(AC_DISABLE_SHARED,
|
||||
[AC_ENABLE_SHARED(no)])
|
||||
AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_SHARED(no)])
|
||||
|
||||
# AC_ENABLE_STATIC - implement the --enable-static flag
|
||||
# Usage: AC_ENABLE_STATIC[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AC_ENABLE_STATIC,
|
||||
[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_STATIC, [dnl
|
||||
define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(static,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
|
||||
|
@ -185,16 +185,16 @@ enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
|
|||
])
|
||||
|
||||
# AC_DISABLE_STATIC - set the default static flag to --disable-static
|
||||
AC_DEFUN(AC_DISABLE_STATIC,
|
||||
[AC_ENABLE_STATIC(no)])
|
||||
AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_STATIC(no)])
|
||||
|
||||
|
||||
# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
|
||||
# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AC_ENABLE_FAST_INSTALL,
|
||||
[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
|
||||
define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(fast-install,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
|
||||
|
@ -219,9 +219,8 @@ enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
|
|||
])
|
||||
|
||||
# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
|
||||
AC_DEFUN(AC_DISABLE_FAST_INSTALL,
|
||||
[AC_ENABLE_FAST_INSTALL(no)])
|
||||
|
||||
AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_FAST_INSTALL(no)])
|
||||
|
||||
# AC_PROG_LD - find the path to the GNU or non-GNU linker
|
||||
AC_DEFUN(AC_PROG_LD,
|
||||
|
@ -239,7 +238,7 @@ if test "$ac_cv_prog_gcc" = yes; then
|
|||
case "$ac_prog" in
|
||||
# Accept absolute paths.
|
||||
changequote(,)dnl
|
||||
/* | [A-Za-z]:[\\/]*)
|
||||
[\\/]* | [A-Za-z]:[\\/]*)
|
||||
re_direlt='/[^/][^/]*/\.\./'
|
||||
changequote([,])dnl
|
||||
# Canonicalize the path of ld
|
||||
|
@ -265,10 +264,10 @@ else
|
|||
fi
|
||||
AC_CACHE_VAL(ac_cv_path_LD,
|
||||
[if test -z "$LD"; then
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||
for ac_dir in $PATH; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f "$ac_dir/$ac_prog"; then
|
||||
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
|
||||
ac_cv_path_LD="$ac_dir/$ac_prog"
|
||||
# Check to see if the program is GNU ld. I'd rather use --version,
|
||||
# but apparently some GNU ld's only accept -v.
|
||||
|
@ -313,10 +312,10 @@ AC_CACHE_VAL(ac_cv_path_NM,
|
|||
# Let the user override the test.
|
||||
ac_cv_path_NM="$NM"
|
||||
else
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f $ac_dir/nm; then
|
||||
if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
|
||||
# Check to see if the nm accepts a BSD-compat flag.
|
||||
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||
# nm: unknown option "B" ignored
|
||||
|
@ -340,227 +339,22 @@ AC_MSG_RESULT([$NM])
|
|||
AC_SUBST(NM)
|
||||
])
|
||||
|
||||
# AC_SYS_NM_PARSE - Check for command to grab the raw symbol name followed
|
||||
# by C symbol name from nm.
|
||||
AC_DEFUN(AC_SYS_NM_PARSE,
|
||||
# AC_CHECK_LIBM - check for math library
|
||||
AC_DEFUN(AC_CHECK_LIBM,
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
AC_REQUIRE([AC_PROG_NM])dnl
|
||||
# Check for command to grab the raw symbol name followed by C symbol from nm.
|
||||
AC_MSG_CHECKING([command to parse $NM output])
|
||||
AC_CACHE_VAL(ac_cv_sys_global_symbol_pipe,
|
||||
[# These are sane defaults that work on at least a few old systems.
|
||||
# {They come from Ultrix. What could be older than Ultrix?!! ;)}
|
||||
|
||||
changequote(,)dnl
|
||||
# Character class describing NM global symbol codes.
|
||||
ac_symcode='[BCDEGRST]'
|
||||
|
||||
# Regexp to match symbols that can be accessed directly from C.
|
||||
ac_sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
|
||||
|
||||
# Transform the above into a raw symbol and a C symbol.
|
||||
ac_symxfrm='\1 \2\3 \3'
|
||||
|
||||
# Transform an extracted symbol line into a proper C declaration
|
||||
ac_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
||||
|
||||
# Define system-specific variables.
|
||||
case "$host_os" in
|
||||
aix*)
|
||||
ac_symcode='[BCDT]'
|
||||
LIBM=
|
||||
case "$host" in
|
||||
*-*-beos* | *-*-cygwin*)
|
||||
# These system don't have libm
|
||||
;;
|
||||
cygwin* | mingw*)
|
||||
ac_symcode='[ABCDGISTW]'
|
||||
*-ncr-sysv4.3*)
|
||||
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
|
||||
AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
|
||||
;;
|
||||
hpux*)
|
||||
ac_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
||||
;;
|
||||
irix*)
|
||||
ac_symcode='[BCDEGRST]'
|
||||
;;
|
||||
solaris*)
|
||||
ac_symcode='[BDT]'
|
||||
*)
|
||||
AC_CHECK_LIB(m, main, LIBM="-lm")
|
||||
;;
|
||||
esac
|
||||
|
||||
# If we're using GNU nm, then use its standard symbol codes.
|
||||
if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
|
||||
ac_symcode='[ABCDGISTW]'
|
||||
fi
|
||||
changequote([,])dnl
|
||||
|
||||
# Try without a prefix undercore, then with it.
|
||||
for ac_symprfx in "" "_"; do
|
||||
|
||||
ac_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($ac_symcode\)[ ][ ]*\($ac_symprfx\)$ac_sympat$/$ac_symxfrm/p'"
|
||||
|
||||
# Check to see that the pipe works correctly.
|
||||
ac_pipe_works=no
|
||||
rm -f conftest.$ac_ext
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
char nm_test_var;
|
||||
void nm_test_func(){}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
int main(){nm_test_var='a';nm_test_func;return 0;}
|
||||
EOF
|
||||
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
# Now try to grab the symbols.
|
||||
ac_nlist=conftest.nm
|
||||
|
||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
||||
|
||||
# Try sorting and uniquifying the output.
|
||||
if sort "$ac_nlist" | uniq > "$ac_nlist"T; then
|
||||
mv -f "$ac_nlist"T "$ac_nlist"
|
||||
else
|
||||
rm -f "$ac_nlist"T
|
||||
fi
|
||||
|
||||
# Make sure that we snagged all the symbols we need.
|
||||
if egrep ' nm_test_var$' "$ac_nlist" >/dev/null; then
|
||||
if egrep ' nm_test_func$' "$ac_nlist" >/dev/null; then
|
||||
cat <<EOF > conftest.c
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
EOF
|
||||
# Now generate the symbol file.
|
||||
eval "$ac_global_symbol_to_cdecl"' < "$ac_nlist" >> conftest.c'
|
||||
|
||||
cat <<EOF >> conftest.c
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# define lt_ptr_t void *
|
||||
#else
|
||||
# define lt_ptr_t char *
|
||||
# define const
|
||||
#endif
|
||||
|
||||
/* The mapping between symbol names and symbols. */
|
||||
const struct {
|
||||
const char *name;
|
||||
lt_ptr_t address;
|
||||
}
|
||||
changequote(,)dnl
|
||||
lt_preloaded_symbols[] =
|
||||
changequote([,])dnl
|
||||
{
|
||||
EOF
|
||||
sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$ac_nlist" >> conftest.c
|
||||
cat <<\EOF >> conftest.c
|
||||
{0, (lt_ptr_t) 0}
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
EOF
|
||||
# Now try linking the two files.
|
||||
mv conftest.$ac_objext conftestm.$ac_objext
|
||||
ac_save_LIBS="$LIBS"
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
LIBS="conftestm.$ac_objext"
|
||||
CFLAGS="$CFLAGS$no_builtin_flag"
|
||||
if AC_TRY_EVAL(ac_link) && test -s conftest; then
|
||||
ac_pipe_works=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&AC_FD_CC
|
||||
cat conftest.c >&AC_FD_CC
|
||||
fi
|
||||
LIBS="$ac_save_LIBS"
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
else
|
||||
echo "cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "cannot find nm_test_var in $ac_nlist" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "$progname: failed program was:" >&AC_FD_CC
|
||||
cat conftest.c >&AC_FD_CC
|
||||
fi
|
||||
rm -rf conftest*
|
||||
|
||||
# Do not use the global_symbol_pipe unless it works.
|
||||
if test "$ac_pipe_works" = yes; then
|
||||
if test x"$ac_symprfx" = x"_"; then
|
||||
ac_cv_sys_symbol_underscore=yes
|
||||
else
|
||||
ac_cv_sys_symbol_underscore=no
|
||||
fi
|
||||
break
|
||||
else
|
||||
ac_cv_sys_global_symbol_pipe=
|
||||
fi
|
||||
done
|
||||
])
|
||||
|
||||
ac_result=yes
|
||||
if test -z "$ac_cv_sys_global_symbol_pipe"; then
|
||||
ac_result=no
|
||||
fi
|
||||
AC_MSG_RESULT($ac_result)
|
||||
])
|
||||
|
||||
# AC_SYS_LIBTOOL_CYGWIN - find tools needed on cygwin
|
||||
AC_DEFUN(AC_SYS_LIBTOOL_CYGWIN,
|
||||
[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||
AC_CHECK_TOOL(AS, as, false)
|
||||
])
|
||||
|
||||
# AC_SYS_SYMBOL_UNDERSCORE - does the compiler prefix global symbols
|
||||
# with an underscore?
|
||||
AC_DEFUN(AC_SYS_SYMBOL_UNDERSCORE,
|
||||
[AC_REQUIRE([AC_PROG_NM])dnl
|
||||
AC_REQUIRE([AC_SYS_NM_PARSE])dnl
|
||||
AC_MSG_CHECKING([for _ prefix in compiled symbols])
|
||||
AC_CACHE_VAL(ac_cv_sys_symbol_underscore,
|
||||
[ac_cv_sys_symbol_underscore=no
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
void nm_test_func(){}
|
||||
int main(){nm_test_func;return 0;}
|
||||
EOF
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
# Now try to grab the symbols.
|
||||
ac_nlist=conftest.nm
|
||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
||||
# See whether the symbols have a leading underscore.
|
||||
if egrep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
|
||||
ac_cv_sys_symbol_underscore=yes
|
||||
else
|
||||
if egrep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
|
||||
:
|
||||
else
|
||||
echo "configure: cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "configure: cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "configure: failed program was:" >&AC_FD_CC
|
||||
cat conftest.c >&AC_FD_CC
|
||||
fi
|
||||
rm -rf conftest*
|
||||
])
|
||||
AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
|
||||
USE_SYMBOL_UNDERSCORE=${ac_cv_sys_symbol_underscore=no}
|
||||
AC_SUBST(USE_SYMBOL_UNDERSCORE)dnl
|
||||
])
|
||||
|
||||
# AC_CHECK_LIBM - check for math library
|
||||
AC_DEFUN(AC_CHECK_LIBM, [
|
||||
AC_CHECK_LIB(mw, _mwvalidcheckl)
|
||||
AC_CHECK_LIB(m, cos)
|
||||
])
|
||||
|
||||
# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
|
||||
|
@ -571,13 +365,14 @@ AC_CHECK_LIB(m, cos)
|
|||
# '${top_builddir}/' (note the single quotes!) if your package is not
|
||||
# flat, and, if you're not using automake, define top_builddir as
|
||||
# appropriate in the Makefiles.
|
||||
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
|
||||
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
case "$enable_ltdl_convenience" in
|
||||
no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
|
||||
"") enable_ltdl_convenience=yes
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
|
||||
esac
|
||||
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
|
||||
INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
|
||||
])
|
||||
|
||||
# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
|
||||
|
@ -589,16 +384,23 @@ AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
|
|||
# flat, and, if you're not using automake, define top_builddir as
|
||||
# appropriate in the Makefiles.
|
||||
# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
|
||||
AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [
|
||||
AC_CHECK_LIB(ltdl, main, LIBLTDL="-lltdl", [
|
||||
case "$enable_ltdl_install" in
|
||||
no) AC_MSG_WARN([libltdl not installed, but installation disabled]) ;;
|
||||
"") enable_ltdl_install=yes
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-install" ;;
|
||||
esac
|
||||
AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_CHECK_LIB(ltdl, main,
|
||||
[test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
|
||||
[if test x"$enable_ltdl_install" = xno; then
|
||||
AC_MSG_WARN([libltdl not installed, but installation disabled])
|
||||
else
|
||||
enable_ltdl_install=yes
|
||||
fi
|
||||
])
|
||||
if test x"$enable_ltdl_install" != x"no"; then
|
||||
if test x"$enable_ltdl_install" = x"yes"; then
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-install"
|
||||
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
|
||||
INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
|
||||
else
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
|
||||
LIBLTDL="-lltdl"
|
||||
INCLTDL=
|
||||
fi
|
||||
])
|
||||
|
||||
|
@ -610,9 +412,9 @@ AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
|
|||
AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
|
||||
AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
|
||||
AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
|
||||
AC_DEFUN(AM_SYS_NM_PARSE, [indir([AC_SYS_NM_PARSE])])dnl
|
||||
AC_DEFUN(AM_SYS_SYMBOL_UNDERSCORE, [indir([AC_SYS_SYMBOL_UNDERSCORE])])dnl
|
||||
AC_DEFUN(AM_SYS_LIBTOOL_CYGWIN, [indir([AC_SYS_LIBTOOL_CYGWIN])])dnl
|
||||
|
||||
dnl This is just to silence aclocal about the macro not being used
|
||||
ifelse([AC_DISABLE_FAST_INSTALL])dnl
|
||||
|
||||
# Do all the work for Automake. This macro actually does too much --
|
||||
# some checks are only needed if your package does certain things.
|
||||
|
|
|
@ -9,27 +9,27 @@
|
|||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define if you have the libdl library or equivalent. */
|
||||
#undef HAVE_LIBDL
|
||||
|
||||
/* Define if you have the GNU dld library. */
|
||||
#undef HAVE_DLD
|
||||
|
||||
/* Define if you have the shl_load function. */
|
||||
#undef HAVE_SHL_LOAD
|
||||
|
||||
/* Define if you have the dlerror function. */
|
||||
#undef HAVE_DLERROR
|
||||
|
||||
/* Define if you have the dlopen function. */
|
||||
#undef HAVE_DLOPEN
|
||||
|
||||
/* Define if you have the index function. */
|
||||
#undef HAVE_INDEX
|
||||
|
||||
/* Define if you have the rindex function. */
|
||||
#undef HAVE_RINDEX
|
||||
|
||||
/* Define if you have the shl_load function. */
|
||||
#undef HAVE_SHL_LOAD
|
||||
|
||||
/* Define if you have the strchr function. */
|
||||
#undef HAVE_STRCHR
|
||||
|
||||
/* Define if you have the strdup function. */
|
||||
#undef HAVE_STRDUP
|
||||
|
||||
/* Define if you have the strrchr function. */
|
||||
#undef HAVE_STRRCHR
|
||||
|
||||
|
@ -75,18 +75,6 @@
|
|||
/* Define if libtool can extract symbol lists from object files. */
|
||||
#undef HAVE_PRELOADED_SYMBOLS
|
||||
|
||||
/* Define if you have the libdl library or equivalent. */
|
||||
#undef HAVE_LIBDL
|
||||
|
||||
/* Define if you have the libdl library. */
|
||||
#undef HAVE_LIBDL
|
||||
|
||||
/* Define if you have the GNU dld library. */
|
||||
#undef HAVE_DLD
|
||||
|
||||
/* Define if you have the shl_load function. */
|
||||
#undef HAVE_SHL_LOAD
|
||||
|
||||
/* Define if dlsym() requires a leading underscode in symbol names. */
|
||||
#undef NEED_USCORE
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
dnl Process this file with autoconf to create configure.
|
||||
dnl Initialize the libltdl package.
|
||||
|
||||
AC_INIT(ltdl.c)
|
||||
|
||||
if test -z "$enable_ltdl_install$enable_ltdl_convenience"; then
|
||||
|
@ -30,19 +30,21 @@ AC_ARG_ENABLE(ltdl-install,
|
|||
AM_CONDITIONAL(INSTALL_LTDL, test x"${enable_ltdl_install-no}" != xno)
|
||||
AM_CONDITIONAL(CONVENIENCE_LTDL, test x"${enable_ltdl_convenience-no}" != xno)
|
||||
|
||||
AC_CACHE_CHECK([which extension is used for shared libraries],
|
||||
libltdl_cv_shlibext, [dnl
|
||||
(
|
||||
dnl Read the libtool configuration
|
||||
rm -f conftest
|
||||
./libtool --config > conftest
|
||||
. ./conftest
|
||||
rm -f conftest
|
||||
|
||||
AC_CACHE_CHECK([which extension is used for shared libraries],
|
||||
libltdl_cv_shlibext, [dnl
|
||||
(
|
||||
last=
|
||||
for spec in $library_names_spec; do
|
||||
last="$spec"
|
||||
done
|
||||
rm -f conftest
|
||||
changequote(, )
|
||||
echo "$last" | sed 's/^[^.]*//;s/\$.*$//;s/\.$//' > conftest
|
||||
echo "$last" | sed 's/\[.*\]//;s/^[^.]*//;s/\$.*$//;s/\.$//' > conftest
|
||||
changequote([, ])
|
||||
)
|
||||
libltdl_cv_shlibext=`cat conftest`
|
||||
|
@ -54,34 +56,14 @@ if test -n "$libltdl_cv_shlibext"; then
|
|||
fi
|
||||
|
||||
AC_CACHE_CHECK([which variable specifies run-time library path],
|
||||
libltdl_cv_shlibpath_var, [dnl
|
||||
(
|
||||
rm -f conftest
|
||||
./libtool --config > conftest
|
||||
. ./conftest
|
||||
rm -f conftest
|
||||
echo "$shlibpath_var" > conftest
|
||||
)
|
||||
libltdl_cv_shlibpath_var=`cat conftest`
|
||||
rm -f conftest
|
||||
])
|
||||
libltdl_cv_shlibpath_var, [libltdl_cv_shlibpath_var="$shlibpath_var"])
|
||||
if test -n "$libltdl_cv_shlibpath_var"; then
|
||||
AC_DEFINE_UNQUOTED(LTDL_SHLIBPATH_VAR, "$libltdl_cv_shlibpath_var",
|
||||
[Define to the name of the environment variable that determines the dynamic library search path. ])
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([for objdir],
|
||||
libltdl_cv_objdir, [dnl
|
||||
(
|
||||
rm -f conftest
|
||||
./libtool --config > conftest
|
||||
. ./conftest
|
||||
rm -f conftest
|
||||
echo "$objdir" > conftest
|
||||
)
|
||||
libltdl_cv_objdir=`cat conftest`
|
||||
rm -f conftest
|
||||
])
|
||||
libltdl_cv_objdir, [libltdl_cv_objdir="$objdir"])
|
||||
test -z "$libltdl_cv_objdir" && libltdl_cv_objdir=".libs"
|
||||
AC_DEFINE_UNQUOTED(LTDL_OBJDIR, "$libltdl_cv_objdir/",
|
||||
[Define to the sub-directory in which libtool stores uninstalled libraries. ])
|
||||
|
@ -89,55 +71,241 @@ AC_DEFINE_UNQUOTED(LTDL_OBJDIR, "$libltdl_cv_objdir/",
|
|||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(malloc.h memory.h stdlib.h stdio.h ctype.h dlfcn.h dl.h dld.h)
|
||||
AC_CHECK_HEADERS(string.h strings.h, break)
|
||||
AC_CHECK_FUNCS(strdup strchr strrchr index rindex)
|
||||
AC_CHECK_FUNCS(strchr index, break)
|
||||
AC_CHECK_FUNCS(strrchr rindex, break)
|
||||
|
||||
AC_CACHE_CHECK([whether libtool supports -dlopen/-dlpreopen],
|
||||
libltdl_cv_preloaded_symbols, [dnl
|
||||
(
|
||||
rm -f conftest
|
||||
./libtool --config > conftest
|
||||
. ./conftest
|
||||
rm -f conftest
|
||||
if test -n "$global_symbol_pipe"; then
|
||||
echo yes > conftest
|
||||
libltdl_cv_preloaded_symbols=yes
|
||||
else
|
||||
echo no > conftest
|
||||
libltdl_cv_preloaded_symbols=no
|
||||
fi
|
||||
)
|
||||
libltdl_cv_preloaded_symbols=`cat conftest`
|
||||
rm -f conftest
|
||||
])
|
||||
if test x"$libltdl_cv_preloaded_symbols" = x"yes"; then
|
||||
AC_DEFINE(HAVE_PRELOADED_SYMBOLS, 1,
|
||||
[Define if libtool can extract symbol lists from object files. ])
|
||||
fi
|
||||
|
||||
test_dlerror=no
|
||||
LIBADD_DL=
|
||||
AC_CHECK_FUNCS(dlopen, [AC_DEFINE(HAVE_LIBDL, 1,
|
||||
[Define if you have the libdl library or equivalent. ]) test_dlerror=yes],
|
||||
[AC_CHECK_LIB(dl, dlopen, [AC_DEFINE(HAVE_LIBDL, 1,
|
||||
[Define if you have the libdl library. ]) dnl
|
||||
LIBADD_DL="-ldl" test_dlerror=yes],
|
||||
[AC_CHECK_LIB(dld, dld_link, [AC_DEFINE(HAVE_DLD, 1,
|
||||
[Define if you have the GNU dld library. ]) dnl
|
||||
LIBADD_DL="-ldld"],
|
||||
[AC_CHECK_FUNCS(shl_load, [AC_DEFINE(HAVE_SHL_LOAD, 1,
|
||||
[Define if you have the shl_load function. ])])]
|
||||
)]
|
||||
)]
|
||||
)
|
||||
AC_CHECK_LIB(dl, dlopen, [AC_DEFINE(HAVE_LIBDL, 1) LIBADD_DL="-ldl"],
|
||||
[AC_CHECK_FUNC(dlopen, [AC_DEFINE(HAVE_LIBDL, 1)])])
|
||||
AC_CHECK_FUNC(shl_load, [AC_DEFINE(HAVE_SHL_LOAD, 1)],
|
||||
[AC_CHECK_LIB(dld, shl_load, [AC_DEFINE(HAVE_SHL_LOAD, 1) LIBADD_DL="$LIBADD_DL -ldld"])])
|
||||
AC_CHECK_LIB(dld, dld_link, [AC_DEFINE(HAVE_DLD, 1)dnl
|
||||
test "x$ac_cv_lib_dld_shl_load" = yes || LIBADD_DL="$LIBADD_DL -ldld"])
|
||||
AC_SUBST(LIBADD_DL)
|
||||
|
||||
if test "$test_dlerror" = yes; then
|
||||
if test "x$ac_cv_func_dlopen" = xyes || test "x$ac_cv_lib_dl_dlopen" = xyes; then
|
||||
LIBS_SAVE="$LIBS"
|
||||
LIBS="$LIBS $LIBADD_DL"
|
||||
AC_CHECK_FUNCS(dlerror)
|
||||
LIBS="$LIBS_SAVE"
|
||||
fi
|
||||
|
||||
AC_SYS_SYMBOL_UNDERSCORE
|
||||
if test x"$USE_SYMBOL_UNDERSCORE" = xyes; then
|
||||
dnl Check for command to grab the raw symbol name followed
|
||||
dnl by C symbol name from nm.
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
AC_REQUIRE([AC_PROG_NM])dnl
|
||||
# Check for command to grab the raw symbol name followed by C symbol from nm.
|
||||
AC_MSG_CHECKING([command to parse $NM output])
|
||||
AC_CACHE_VAL(ac_cv_sys_global_symbol_pipe,
|
||||
[# These are sane defaults that work on at least a few old systems.
|
||||
# {They come from Ultrix. What could be older than Ultrix?!! ;)}
|
||||
|
||||
changequote(,)dnl
|
||||
# Character class describing NM global symbol codes.
|
||||
ac_symcode='[BCDEGRST]'
|
||||
|
||||
# Regexp to match symbols that can be accessed directly from C.
|
||||
ac_sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
|
||||
|
||||
# Transform the above into a raw symbol and a C symbol.
|
||||
ac_symxfrm='\1 \2\3 \3'
|
||||
|
||||
# Transform an extracted symbol line into a proper C declaration
|
||||
ac_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
||||
|
||||
# Define system-specific variables.
|
||||
case "$host_os" in
|
||||
aix*)
|
||||
ac_symcode='[BCDT]'
|
||||
;;
|
||||
cygwin* | mingw*)
|
||||
ac_symcode='[ABCDGISTW]'
|
||||
;;
|
||||
hpux*)
|
||||
ac_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
||||
;;
|
||||
irix*)
|
||||
ac_symcode='[BCDEGRST]'
|
||||
;;
|
||||
solaris*)
|
||||
ac_symcode='[BDT]'
|
||||
;;
|
||||
esac
|
||||
|
||||
# If we're using GNU nm, then use its standard symbol codes.
|
||||
if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
|
||||
ac_symcode='[ABCDGISTW]'
|
||||
fi
|
||||
changequote([,])dnl
|
||||
|
||||
# Try without a prefix undercore, then with it.
|
||||
for ac_symprfx in "" "_"; do
|
||||
|
||||
ac_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($ac_symcode\)[ ][ ]*\($ac_symprfx\)$ac_sympat$/$ac_symxfrm/p'"
|
||||
|
||||
# Check to see that the pipe works correctly.
|
||||
ac_pipe_works=no
|
||||
rm -f conftest.$ac_ext
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
char nm_test_var;
|
||||
void nm_test_func(){}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
int main(){nm_test_var='a';nm_test_func;return 0;}
|
||||
EOF
|
||||
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
# Now try to grab the symbols.
|
||||
ac_nlist=conftest.nm
|
||||
|
||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
||||
|
||||
# Try sorting and uniquifying the output.
|
||||
if sort "$ac_nlist" | uniq > "$ac_nlist"T; then
|
||||
mv -f "$ac_nlist"T "$ac_nlist"
|
||||
else
|
||||
rm -f "$ac_nlist"T
|
||||
fi
|
||||
|
||||
# Make sure that we snagged all the symbols we need.
|
||||
if egrep ' nm_test_var$' "$ac_nlist" >/dev/null; then
|
||||
if egrep ' nm_test_func$' "$ac_nlist" >/dev/null; then
|
||||
cat <<EOF > conftest.c
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
EOF
|
||||
# Now generate the symbol file.
|
||||
eval "$ac_global_symbol_to_cdecl"' < "$ac_nlist" >> conftest.c'
|
||||
|
||||
cat <<EOF >> conftest.c
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# define lt_ptr_t void *
|
||||
#else
|
||||
# define lt_ptr_t char *
|
||||
# define const
|
||||
#endif
|
||||
|
||||
/* The mapping between symbol names and symbols. */
|
||||
const struct {
|
||||
const char *name;
|
||||
lt_ptr_t address;
|
||||
}
|
||||
changequote(,)dnl
|
||||
lt_preloaded_symbols[] =
|
||||
changequote([,])dnl
|
||||
{
|
||||
EOF
|
||||
sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$ac_nlist" >> conftest.c
|
||||
cat <<\EOF >> conftest.c
|
||||
{0, (lt_ptr_t) 0}
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
EOF
|
||||
# Now try linking the two files.
|
||||
mv conftest.$ac_objext conftstm.$ac_objext
|
||||
ac_save_LIBS="$LIBS"
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
LIBS="conftstm.$ac_objext"
|
||||
CFLAGS="$CFLAGS$no_builtin_flag"
|
||||
if AC_TRY_EVAL(ac_link) && test -s conftest; then
|
||||
ac_pipe_works=yes
|
||||
else
|
||||
echo "configure: failed program was:" >&AC_FD_CC
|
||||
cat conftest.c >&AC_FD_CC
|
||||
fi
|
||||
LIBS="$ac_save_LIBS"
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
else
|
||||
echo "cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "cannot find nm_test_var in $ac_nlist" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "$progname: failed program was:" >&AC_FD_CC
|
||||
cat conftest.c >&AC_FD_CC
|
||||
fi
|
||||
rm -rf conftest* conftst*
|
||||
|
||||
# Do not use the global_symbol_pipe unless it works.
|
||||
if test "$ac_pipe_works" = yes; then
|
||||
if test x"$ac_symprfx" = x"_"; then
|
||||
ac_cv_sys_symbol_underscore=yes
|
||||
else
|
||||
ac_cv_sys_symbol_underscore=no
|
||||
fi
|
||||
break
|
||||
else
|
||||
ac_cv_sys_global_symbol_pipe=
|
||||
fi
|
||||
done
|
||||
])
|
||||
|
||||
ac_result=yes
|
||||
if test -z "$ac_cv_sys_global_symbol_pipe"; then
|
||||
ac_result=no
|
||||
fi
|
||||
AC_MSG_RESULT($ac_result)
|
||||
|
||||
dnl does the compiler prefix global symbols with an underscore?
|
||||
AC_MSG_CHECKING([for _ prefix in compiled symbols])
|
||||
AC_CACHE_VAL(ac_cv_sys_symbol_underscore,
|
||||
[ac_cv_sys_symbol_underscore=no
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
void nm_test_func(){}
|
||||
int main(){nm_test_func;return 0;}
|
||||
EOF
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
# Now try to grab the symbols.
|
||||
ac_nlist=conftest.nm
|
||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
||||
# See whether the symbols have a leading underscore.
|
||||
if egrep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
|
||||
ac_cv_sys_symbol_underscore=yes
|
||||
else
|
||||
if egrep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
|
||||
:
|
||||
else
|
||||
echo "configure: cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "configure: cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
||||
fi
|
||||
else
|
||||
echo "configure: failed program was:" >&AC_FD_CC
|
||||
cat conftest.c >&AC_FD_CC
|
||||
fi
|
||||
rm -rf conftest*
|
||||
])
|
||||
AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
|
||||
|
||||
if test x"$ac_cv_sys_symbol_underscore" = xyes; then
|
||||
if test x"$ac_cv_func_dlopen" = xyes ||
|
||||
test x"$ac_cv_lib_dl_dlopen" = xyes ; then
|
||||
AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
|
||||
|
@ -184,7 +352,7 @@ if test x"$USE_SYMBOL_UNDERSCORE" = xyes; then
|
|||
fnord() { int i=42;}
|
||||
main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
|
||||
if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
|
||||
if(ptr1 && !ptr2) exit(0); } exit(1); }
|
||||
if(ptr1 && !ptr2) { dlclose(self); exit(0); } } exit(1); }
|
||||
], libltdl_cv_need_uscore=no, libltdl_cv_need_uscore=yes,
|
||||
libltdl_cv_need_uscore=cross
|
||||
)])
|
||||
|
|
292
libltdl/ltdl.c
292
libltdl/ltdl.c
|
@ -1,6 +1,6 @@
|
|||
/* ltdl.c -- system independent dlopen wrapper
|
||||
Copyright (C) 1998-1999 Free Software Foundation, Inc.
|
||||
Originally by Thomas Tanner <tanner@gmx.de>
|
||||
Originally by Thomas Tanner <tanner@ffii.org>
|
||||
This file is part of GNU Libtool.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
|
@ -8,6 +8,11 @@ modify it under the terms of the GNU Library General Public
|
|||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Library General Public License,
|
||||
if you distribute this file as part of a program that uses GNU libtool
|
||||
to create libraries and programs, you may include it under the same
|
||||
distribution terms that you use for the rest of that program.
|
||||
|
||||
This library 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
|
||||
|
@ -76,12 +81,16 @@ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||
#define LTDL_SYMBOL_OVERHEAD 5
|
||||
|
||||
static const char objdir[] = LTDL_OBJDIR;
|
||||
#ifdef LTDL_SHLIB_EXT
|
||||
static const char shlib_ext[] = LTDL_SHLIB_EXT;
|
||||
#endif
|
||||
|
||||
static const char unknown_error[] = "unknown error";
|
||||
static const char dlopen_not_supported_error[] = "dlopen support not available";
|
||||
static const char file_not_found_error[] = "file not found";
|
||||
static const char no_symbols_error[] = "no symbols defined";
|
||||
static const char cannot_open_error[] = "can't open the module";
|
||||
static const char cannot_close_error[] = "can't close the module";
|
||||
static const char symbol_error[] = "symbol not found";
|
||||
static const char memory_error[] = "not enough memory";
|
||||
static const char invalid_handle_error[] = "invalid handle";
|
||||
|
@ -95,17 +104,17 @@ const lt_dlsymlist lt_preloaded_symbols[1] = { { 0, 0 } };
|
|||
|
||||
static const char *last_error = 0;
|
||||
|
||||
lt_ptr_t (*lt_dlmalloc) __P((size_t size)) = malloc;
|
||||
void (*lt_dlfree) __P((lt_ptr_t ptr)) = free;
|
||||
lt_ptr_t (*lt_dlmalloc) LTDL_PARAMS((size_t size)) = (lt_ptr_t(*)LTDL_PARAMS((size_t)))malloc;
|
||||
void (*lt_dlfree) LTDL_PARAMS((lt_ptr_t ptr)) = (void(*)LTDL_PARAMS((lt_ptr_t)))free;
|
||||
|
||||
typedef struct lt_dltype_t {
|
||||
struct lt_dltype_t *next;
|
||||
const char *sym_prefix; /* prefix for symbols */
|
||||
int (*mod_init) __P((void));
|
||||
int (*mod_exit) __P((void));
|
||||
int (*lib_open) __P((lt_dlhandle handle, const char *filename));
|
||||
int (*lib_close) __P((lt_dlhandle handle));
|
||||
lt_ptr_t (*find_sym) __P((lt_dlhandle handle, const char *symbol));
|
||||
int (*mod_init) LTDL_PARAMS((void));
|
||||
int (*mod_exit) LTDL_PARAMS((void));
|
||||
int (*lib_open) LTDL_PARAMS((lt_dlhandle handle, const char *filename));
|
||||
int (*lib_close) LTDL_PARAMS((lt_dlhandle handle));
|
||||
lt_ptr_t (*find_sym) LTDL_PARAMS((lt_dlhandle handle, const char *symbol));
|
||||
} lt_dltype_t;
|
||||
|
||||
#define LTDL_TYPE_TOP 0
|
||||
|
@ -156,7 +165,7 @@ strchr(str, ch)
|
|||
{
|
||||
const char *p;
|
||||
|
||||
for (p = str; *p != (char)ch && p != '\0'; p++)
|
||||
for (p = str; *p != (char)ch && *p != '\0'; p++)
|
||||
/*NOWORK*/;
|
||||
|
||||
return (*p == (char)ch) ? p : 0;
|
||||
|
@ -183,7 +192,7 @@ strrchr(str, ch)
|
|||
{
|
||||
const char *p;
|
||||
|
||||
for (p = str; p != '\0'; p++)
|
||||
for (p = str; *p != '\0'; p++)
|
||||
/*NOWORK*/;
|
||||
|
||||
while (*p != (char)ch && p >= str)
|
||||
|
@ -204,10 +213,6 @@ strrchr(str, ch)
|
|||
# include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
#if ! HAVE_DLERROR /* not all platforms have dlerror() */
|
||||
#define dlerror() unknown_error
|
||||
#endif
|
||||
|
||||
#ifdef RTLD_GLOBAL
|
||||
# define LTDL_GLOBAL RTLD_GLOBAL
|
||||
#else
|
||||
|
@ -241,65 +246,77 @@ strrchr(str, ch)
|
|||
#endif
|
||||
|
||||
static int
|
||||
dl_init ()
|
||||
sys_dl_init LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
dl_exit ()
|
||||
sys_dl_exit LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
dl_open (handle, filename)
|
||||
sys_dl_open (handle, filename)
|
||||
lt_dlhandle handle;
|
||||
const char *filename;
|
||||
{
|
||||
handle->handle = dlopen(filename, LTDL_GLOBAL | LTDL_LAZY_OR_NOW);
|
||||
if (!handle->handle) {
|
||||
#if HAVE_DLERROR
|
||||
last_error = dlerror();
|
||||
#else
|
||||
last_error = cannot_open_error;
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
dl_close (handle)
|
||||
sys_dl_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
if (dlclose(handle->handle) != 0) {
|
||||
#if HAVE_DLERROR
|
||||
last_error = dlerror();
|
||||
#else
|
||||
last_error = cannot_close_error;
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static lt_ptr_t
|
||||
dl_sym (handle, symbol)
|
||||
sys_dl_sym (handle, symbol)
|
||||
lt_dlhandle handle;
|
||||
const char *symbol;
|
||||
{
|
||||
lt_ptr_t address = dlsym(handle->handle, symbol);
|
||||
|
||||
if (!address)
|
||||
#if HAVE_DLERROR
|
||||
last_error = dlerror();
|
||||
#else
|
||||
last_error = symbol_error;
|
||||
#endif
|
||||
return address;
|
||||
}
|
||||
|
||||
static
|
||||
lt_dltype_t
|
||||
#ifdef NEED_USCORE
|
||||
dl = { LTDL_TYPE_TOP, "_", dl_init, dl_exit,
|
||||
dl_open, dl_close, dl_sym };
|
||||
sys_dl = { LTDL_TYPE_TOP, "_", sys_dl_init, sys_dl_exit,
|
||||
sys_dl_open, sys_dl_close, sys_dl_sym };
|
||||
#else
|
||||
dl = { LTDL_TYPE_TOP, 0, dl_init, dl_exit,
|
||||
dl_open, dl_close, dl_sym };
|
||||
sys_dl = { LTDL_TYPE_TOP, 0, sys_dl_init, sys_dl_exit,
|
||||
sys_dl_open, sys_dl_close, sys_dl_sym };
|
||||
#endif
|
||||
|
||||
#undef LTDL_TYPE_TOP
|
||||
#define LTDL_TYPE_TOP &dl
|
||||
#define LTDL_TYPE_TOP &sys_dl
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -344,66 +361,66 @@ dl = { LTDL_TYPE_TOP, 0, dl_init, dl_exit,
|
|||
#define BIND_RESTRICTED 0
|
||||
#endif /* BIND_RESTRICTED */
|
||||
|
||||
#define LTDL_BIND_FLAGS (BIND_IMMEDIATE | BIND_NONFATAL | BIND_VERBOSE | DYNAMIC_PATH)
|
||||
#define LTDL_BIND_FLAGS (BIND_IMMEDIATE | BIND_NONFATAL | DYNAMIC_PATH)
|
||||
|
||||
static int
|
||||
shl_init ()
|
||||
sys_shl_init LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
shl_exit ()
|
||||
sys_shl_exit LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
shl_open (handle, filename)
|
||||
sys_shl_open (handle, filename)
|
||||
lt_dlhandle handle;
|
||||
const char *filename;
|
||||
{
|
||||
handle->handle = shl_load(filename, LTDL_BIND_FLAGS, 0L);
|
||||
if (!handle->handle) {
|
||||
last_error = unknown_error;
|
||||
last_error = cannot_open_error;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
shl_close (handle)
|
||||
sys_shl_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
if (shl_unload((shl_t) (handle->handle)) != 0) {
|
||||
last_error = unknown_error;
|
||||
last_error = cannot_close_error;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static lt_ptr_t
|
||||
shl_sym (handle, symbol)
|
||||
sys_shl_sym (handle, symbol)
|
||||
lt_dlhandle handle;
|
||||
const char *symbol;
|
||||
{
|
||||
lt_ptr_t address;
|
||||
|
||||
if (shl_findsym((shl_t) (handle->handle), symbol, TYPE_UNDEFINED,
|
||||
&address) != 0 || !(handle->handle) || !address) {
|
||||
last_error = unknown_error;
|
||||
return 0;
|
||||
}
|
||||
if (handle->handle && shl_findsym((shl_t*) &(handle->handle),
|
||||
symbol, TYPE_UNDEFINED, &address) == 0)
|
||||
if (address)
|
||||
return address;
|
||||
last_error = symbol_error;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static
|
||||
lt_dltype_t
|
||||
shl = { LTDL_TYPE_TOP, 0, shl_init, shl_exit,
|
||||
shl_open, shl_close, shl_sym };
|
||||
sys_shl = { LTDL_TYPE_TOP, 0, sys_shl_init, sys_shl_exit,
|
||||
sys_shl_open, sys_shl_close, sys_shl_sym };
|
||||
|
||||
#undef LTDL_TYPE_TOP
|
||||
#define LTDL_TYPE_TOP &shl
|
||||
#define LTDL_TYPE_TOP &sys_shl
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -416,19 +433,19 @@ shl = { LTDL_TYPE_TOP, 0, shl_init, shl_exit,
|
|||
#endif
|
||||
|
||||
static int
|
||||
dld_init ()
|
||||
sys_dld_init LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
dld_exit ()
|
||||
sys_dld_exit LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
dld_open (handle, filename)
|
||||
sys_dld_open (handle, filename)
|
||||
lt_dlhandle handle;
|
||||
const char *filename;
|
||||
{
|
||||
|
@ -438,7 +455,7 @@ dld_open (handle, filename)
|
|||
return 1;
|
||||
}
|
||||
if (dld_link(filename) != 0) {
|
||||
last_error = unknown_error;
|
||||
last_error = cannot_open_error;
|
||||
lt_dlfree(handle->handle);
|
||||
return 1;
|
||||
}
|
||||
|
@ -446,11 +463,11 @@ dld_open (handle, filename)
|
|||
}
|
||||
|
||||
static int
|
||||
dld_close (handle)
|
||||
sys_dld_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
if (dld_unlink_by_file((char*)(handle->handle), 1) != 0) {
|
||||
last_error = unknown_error;
|
||||
last_error = cannot_close_error;
|
||||
return 1;
|
||||
}
|
||||
lt_dlfree(handle->filename);
|
||||
|
@ -458,24 +475,24 @@ dld_close (handle)
|
|||
}
|
||||
|
||||
static lt_ptr_t
|
||||
dld_sym (handle, symbol)
|
||||
sys_dld_sym (handle, symbol)
|
||||
lt_dlhandle handle;
|
||||
const char *symbol;
|
||||
{
|
||||
lt_ptr_t address = dld_get_func(symbol);
|
||||
|
||||
if (!address)
|
||||
last_error = unknown_error;
|
||||
last_error = symbol_error;
|
||||
return address;
|
||||
}
|
||||
|
||||
static
|
||||
lt_dltype_t
|
||||
dld = { LTDL_TYPE_TOP, 0, dld_init, dld_exit,
|
||||
dld_open, dld_close, dld_sym };
|
||||
sys_dld = { LTDL_TYPE_TOP, 0, sys_dld_init, sys_dld_exit,
|
||||
sys_dld_open, sys_dld_close, sys_dld_sym };
|
||||
|
||||
#undef LTDL_TYPE_TOP
|
||||
#define LTDL_TYPE_TOP &dld
|
||||
#define LTDL_TYPE_TOP &sys_dld
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -486,60 +503,178 @@ dld = { LTDL_TYPE_TOP, 0, dld_init, dld_exit,
|
|||
#include <windows.h>
|
||||
|
||||
static int
|
||||
wll_init ()
|
||||
sys_wll_init LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
wll_exit ()
|
||||
sys_wll_exit LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Forward declaration; required to implement handle search below. */
|
||||
static lt_dlhandle handles;
|
||||
|
||||
static int
|
||||
wll_open (handle, filename)
|
||||
sys_wll_open (handle, filename)
|
||||
lt_dlhandle handle;
|
||||
const char *filename;
|
||||
{
|
||||
handle->handle = LoadLibrary(filename);
|
||||
if (!handle->handle) {
|
||||
last_error = unknown_error;
|
||||
lt_dlhandle cur;
|
||||
char *searchname = NULL;
|
||||
char *ext = strrchr(filename, '.');
|
||||
|
||||
if (ext) {
|
||||
/* FILENAME already has an extension. */
|
||||
searchname = strdup(filename);
|
||||
} else {
|
||||
/* Append a `.' to stop Windows from adding an
|
||||
implicit `.dll' extension. */
|
||||
searchname = (char*)lt_dlmalloc(2+ strlen(filename));
|
||||
strcpy(searchname, filename);
|
||||
strcat(searchname, ".");
|
||||
}
|
||||
|
||||
handle->handle = LoadLibrary(searchname);
|
||||
lt_dlfree(searchname);
|
||||
|
||||
/* libltdl expects this function to fail if it is unable
|
||||
to physically load the library. Sadly, LoadLibrary
|
||||
will search the loaded libraries for a match and return
|
||||
one of them if the path search load fails.
|
||||
|
||||
We check whether LoadLibrary is returning a handle to
|
||||
an already loaded module, and simulate failure if we
|
||||
find one. */
|
||||
cur = handles;
|
||||
while (cur) {
|
||||
if (!cur->handle) {
|
||||
cur = 0;
|
||||
break;
|
||||
}
|
||||
if (cur->handle == handle->handle)
|
||||
break;
|
||||
cur = cur->next;
|
||||
}
|
||||
|
||||
if (cur || !handle->handle) {
|
||||
last_error = cannot_open_error;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
wll_close (handle)
|
||||
sys_wll_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
if (FreeLibrary(handle->handle) != 0) {
|
||||
last_error = unknown_error;
|
||||
if (FreeLibrary(handle->handle) == 0) {
|
||||
last_error = cannot_close_error;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static lt_ptr_t
|
||||
wll_sym (handle, symbol)
|
||||
sys_wll_sym (handle, symbol)
|
||||
lt_dlhandle handle;
|
||||
const char *symbol;
|
||||
{
|
||||
lt_ptr_t address = GetProcAddress(handle->handle, symbol);
|
||||
|
||||
if (!address)
|
||||
last_error = unknown_error;
|
||||
last_error = symbol_error;
|
||||
return address;
|
||||
}
|
||||
|
||||
static
|
||||
lt_dltype_t
|
||||
wll = { LTDL_TYPE_TOP, 0, wll_init, wll_exit,
|
||||
wll_open, wll_close, wll_sym };
|
||||
sys_wll = { LTDL_TYPE_TOP, 0, sys_wll_init, sys_wll_exit,
|
||||
sys_wll_open, sys_wll_close, sys_wll_sym };
|
||||
|
||||
#undef LTDL_TYPE_TOP
|
||||
#define LTDL_TYPE_TOP &wll
|
||||
#define LTDL_TYPE_TOP &sys_wll
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __BEOS__
|
||||
|
||||
/* dynamic linking for BeOS */
|
||||
|
||||
#include <kernel/image.h>
|
||||
|
||||
static int
|
||||
sys_bedl_init LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_bedl_exit LTDL_PARAMS((void))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_bedl_open (handle, filename)
|
||||
lt_dlhandle handle;
|
||||
const char *filename;
|
||||
{
|
||||
image_id image = 0;
|
||||
|
||||
if (filename) {
|
||||
image = load_add_on(filename);
|
||||
} else {
|
||||
image_info info;
|
||||
int32 cookie = 0;
|
||||
if (get_next_image_info(0, &cookie, &info) == B_OK)
|
||||
image = load_add_on(info.name);
|
||||
}
|
||||
if (image <= 0) {
|
||||
last_error = cannot_open_error;
|
||||
return 1;
|
||||
}
|
||||
handle->handle = (void*) image;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_bedl_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
if (unload_add_on((image_id)handle->handle) != B_OK) {
|
||||
last_error = cannot_close_error;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static lt_ptr_t
|
||||
sys_bedl_sym (handle, symbol)
|
||||
lt_dlhandle handle;
|
||||
const char *symbol;
|
||||
{
|
||||
lt_ptr_t address = 0;
|
||||
image_id image = (image_id)handle->handle;
|
||||
|
||||
if (get_image_symbol(image, symbol, B_SYMBOL_TYPE_ANY,
|
||||
&address) != B_OK) {
|
||||
last_error = symbol_error;
|
||||
return 0;
|
||||
}
|
||||
return address;
|
||||
}
|
||||
|
||||
static
|
||||
lt_dltype_t
|
||||
sys_bedl = { LTDL_TYPE_TOP, 0, sys_bedl_init, sys_bedl_exit,
|
||||
sys_bedl_open, sys_bedl_close, sys_bedl_sym };
|
||||
|
||||
#undef LTDL_TYPE_TOP
|
||||
#define LTDL_TYPE_TOP &sys_bedl
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -554,7 +689,7 @@ static const lt_dlsymlist *default_preloaded_symbols = 0;
|
|||
static lt_dlsymlists_t *preloaded_symbols = 0;
|
||||
|
||||
static int
|
||||
presym_init ()
|
||||
presym_init LTDL_PARAMS((void))
|
||||
{
|
||||
preloaded_symbols = 0;
|
||||
if (default_preloaded_symbols)
|
||||
|
@ -563,7 +698,7 @@ presym_init ()
|
|||
}
|
||||
|
||||
static int
|
||||
presym_free_symlists ()
|
||||
presym_free_symlists LTDL_PARAMS((void))
|
||||
{
|
||||
lt_dlsymlists_t *lists = preloaded_symbols;
|
||||
|
||||
|
@ -578,7 +713,7 @@ presym_free_symlists ()
|
|||
}
|
||||
|
||||
static int
|
||||
presym_exit ()
|
||||
presym_exit LTDL_PARAMS((void))
|
||||
{
|
||||
presym_free_symlists();
|
||||
return 0;
|
||||
|
@ -650,6 +785,8 @@ static int
|
|||
presym_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
/* Just to silence gcc -Wall */
|
||||
handle = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -686,7 +823,7 @@ static lt_dltype_t *types = LTDL_TYPE_TOP;
|
|||
#undef LTDL_TYPE_TOP
|
||||
|
||||
int
|
||||
lt_dlinit ()
|
||||
lt_dlinit LTDL_PARAMS((void))
|
||||
{
|
||||
/* initialize libltdl */
|
||||
lt_dltype_t **type = &types;
|
||||
|
@ -737,7 +874,7 @@ lt_dlpreload_default (preloaded)
|
|||
}
|
||||
|
||||
int
|
||||
lt_dlexit ()
|
||||
lt_dlexit LTDL_PARAMS((void))
|
||||
{
|
||||
/* shut down libltdl */
|
||||
lt_dltype_t *type = types;
|
||||
|
@ -975,6 +1112,8 @@ load_deplibs(handle, deplibs)
|
|||
/* FIXME: load deplibs */
|
||||
handle->depcount = 0;
|
||||
handle->deplibs = 0;
|
||||
/* Just to silence gcc -Wall */
|
||||
deplibs = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -983,6 +1122,8 @@ unload_deplibs(handle)
|
|||
lt_dlhandle handle;
|
||||
{
|
||||
/* FIXME: unload deplibs */
|
||||
/* Just to silence gcc -Wall */
|
||||
handle = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -994,7 +1135,7 @@ trim (dest, str)
|
|||
/* remove the leading and trailing "'" from str
|
||||
and store the result in dest */
|
||||
char *tmp;
|
||||
char *end = strrchr(str, '\'');
|
||||
const char *end = strrchr(str, '\'');
|
||||
int len = strlen(str);
|
||||
|
||||
if (*dest)
|
||||
|
@ -1099,7 +1240,7 @@ lt_dlopen (filename)
|
|||
}
|
||||
/* canonicalize the module name */
|
||||
for (i = 0; i < ext - basename; i++)
|
||||
if (isalnum(basename[i]))
|
||||
if (isalnum((int)(basename[i])))
|
||||
name[i] = basename[i];
|
||||
else
|
||||
name[i] = '_';
|
||||
|
@ -1417,7 +1558,7 @@ lt_dlsym (handle, symbol)
|
|||
}
|
||||
|
||||
const char *
|
||||
lt_dlerror ()
|
||||
lt_dlerror LTDL_PARAMS((void))
|
||||
{
|
||||
const char *error = last_error;
|
||||
|
||||
|
@ -1440,11 +1581,12 @@ lt_dladdsearchdir (search_dir)
|
|||
} else {
|
||||
char *new_search_path = (char*)
|
||||
lt_dlmalloc(strlen(user_search_path) +
|
||||
strlen(search_dir) + 1);
|
||||
strlen(search_dir) + 2); /* ':' + '\0' == 2 */
|
||||
if (!new_search_path) {
|
||||
last_error = memory_error;
|
||||
return 1;
|
||||
}
|
||||
strcpy(new_search_path, user_search_path);
|
||||
strcat(new_search_path, ":");
|
||||
strcat(new_search_path, search_dir);
|
||||
lt_dlfree(user_search_path);
|
||||
|
@ -1469,7 +1611,7 @@ lt_dlsetsearchpath (search_path)
|
|||
}
|
||||
|
||||
const char *
|
||||
lt_dlgetsearchpath ()
|
||||
lt_dlgetsearchpath LTDL_PARAMS((void))
|
||||
{
|
||||
return user_search_path;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* ltdl.h -- generic dlopen functions
|
||||
Copyright (C) 1998-1999 Free Software Foundation, Inc.
|
||||
Originally by Thomas Tanner <tanner@gmx.de>
|
||||
Originally by Thomas Tanner <tanner@ffii.org>
|
||||
This file is part of GNU Libtool.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
|
@ -8,6 +8,11 @@ modify it under the terms of the GNU Library General Public
|
|||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
As a special exception to the GNU Library General Public License,
|
||||
if you distribute this file as part of a program that uses GNU libtool
|
||||
to create libraries and programs, you may include it under the same
|
||||
distribution terms that you use for the rest of that program.
|
||||
|
||||
This library 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
|
||||
|
@ -35,16 +40,16 @@ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||
# define __END_DECLS /* empty */
|
||||
#endif
|
||||
|
||||
/* __P is a macro used to wrap function prototypes, so that compilers
|
||||
/* LTDL_PARAMS is a macro used to wrap function prototypes, so that compilers
|
||||
that don't understand ANSI C prototypes still work, and ANSI C
|
||||
compilers can issue warnings about type mismatches. */
|
||||
#undef __P
|
||||
#undef LTDL_PARAMS
|
||||
#undef lt_ptr_t
|
||||
#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32) || defined(__cplusplus)
|
||||
# define __P(protos) protos
|
||||
# define LTDL_PARAMS(protos) protos
|
||||
# define lt_ptr_t void*
|
||||
#else
|
||||
# define __P(protos) ()
|
||||
# define LTDL_PARAMS(protos) ()
|
||||
# define lt_ptr_t char*
|
||||
#endif
|
||||
|
||||
|
@ -62,24 +67,24 @@ typedef struct {
|
|||
} lt_dlsymlist;
|
||||
|
||||
__BEGIN_DECLS
|
||||
extern int lt_dlinit __P((void));
|
||||
extern int lt_dlpreload __P((const lt_dlsymlist *preloaded));
|
||||
extern int lt_dlpreload_default __P((const lt_dlsymlist *preloaded));
|
||||
extern int lt_dlexit __P((void));
|
||||
extern lt_dlhandle lt_dlopen __P((const char *filename));
|
||||
extern lt_dlhandle lt_dlopenext __P((const char *filename));
|
||||
extern int lt_dlclose __P((lt_dlhandle handle));
|
||||
extern lt_ptr_t lt_dlsym __P((lt_dlhandle handle, const char *name));
|
||||
extern const char *lt_dlerror __P((void));
|
||||
extern int lt_dladdsearchdir __P((const char *search_dir));
|
||||
extern int lt_dlsetsearchpath __P((const char *search_path));
|
||||
extern const char *lt_dlgetsearchpath __P((void));
|
||||
extern int lt_dlinit LTDL_PARAMS((void));
|
||||
extern int lt_dlpreload LTDL_PARAMS((const lt_dlsymlist *preloaded));
|
||||
extern int lt_dlpreload_default LTDL_PARAMS((const lt_dlsymlist *preloaded));
|
||||
extern int lt_dlexit LTDL_PARAMS((void));
|
||||
extern lt_dlhandle lt_dlopen LTDL_PARAMS((const char *filename));
|
||||
extern lt_dlhandle lt_dlopenext LTDL_PARAMS((const char *filename));
|
||||
extern int lt_dlclose LTDL_PARAMS((lt_dlhandle handle));
|
||||
extern lt_ptr_t lt_dlsym LTDL_PARAMS((lt_dlhandle handle, const char *name));
|
||||
extern const char *lt_dlerror LTDL_PARAMS((void));
|
||||
extern int lt_dladdsearchdir LTDL_PARAMS((const char *search_dir));
|
||||
extern int lt_dlsetsearchpath LTDL_PARAMS((const char *search_path));
|
||||
extern const char *lt_dlgetsearchpath LTDL_PARAMS((void));
|
||||
|
||||
extern const lt_dlsymlist lt_preloaded_symbols[];
|
||||
#define LTDL_SET_PRELOADED_SYMBOLS() lt_dlpreload_default(lt_preloaded_symbols)
|
||||
|
||||
extern lt_ptr_t (*lt_dlmalloc)__P((size_t size));
|
||||
extern void (*lt_dlfree)__P((lt_ptr_t ptr));
|
||||
extern lt_ptr_t (*lt_dlmalloc)LTDL_PARAMS((size_t size));
|
||||
extern void (*lt_dlfree)LTDL_PARAMS((lt_ptr_t ptr));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
|
17
rend.c
17
rend.c
|
@ -1,6 +1,7 @@
|
|||
#include <X11/Xlib.h>
|
||||
#include <X11/extensions/XShm.h>
|
||||
#include "common.h"
|
||||
#include "colormod.h"
|
||||
#include "scale.h"
|
||||
#include "image.h"
|
||||
#include "ximage.h"
|
||||
|
@ -10,6 +11,7 @@
|
|||
#include "grab.h"
|
||||
#include "blend.h"
|
||||
#include "rend.h"
|
||||
#include "colormod.h"
|
||||
|
||||
/* size of the lines per segment we scale / render at a time */
|
||||
#define LINESIZE 16
|
||||
|
@ -32,7 +34,7 @@ __imlib_RenderImage(Display *d, ImlibImage *im,
|
|||
{
|
||||
XImage *xim = NULL, *mxim = NULL;
|
||||
Context *ct;
|
||||
DATA32 *buf = NULL, *pointer, *back = NULL;
|
||||
DATA32 *buf = NULL, *pointer = NULL, *back = NULL;
|
||||
int y, h, hh, jump;
|
||||
static GC gc = 0;
|
||||
static GC gcm = 0;
|
||||
|
@ -218,12 +220,25 @@ __imlib_RenderImage(Display *d, ImlibImage *im,
|
|||
__imlib_ScaleSampleRGBA(ypoints, xpoints, buf, dx, dy + y, 0, 0, dw, hh, dw);
|
||||
jump = 0;
|
||||
pointer = buf;
|
||||
if (cmod)
|
||||
__imlib_DataCmodApply(buf, dw, hh, 0, cmod);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cmod)
|
||||
{
|
||||
if (!buf)
|
||||
buf = malloc(dw * LINESIZE * sizeof(DATA32));
|
||||
__imlib_DataCmodApply(buf, dw, hh, 0, cmod);
|
||||
pointer = buf;
|
||||
jump = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
jump = im->w - sw;
|
||||
pointer = im->data + ((y + sy) * im->w) + sx;
|
||||
}
|
||||
}
|
||||
/* if we have a back buffer - we're blending to the bg */
|
||||
if (back)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include <X11/Xlib.h>
|
||||
#include "common.h"
|
||||
#include "colormod.h"
|
||||
#include "scale.h"
|
||||
#include "image.h"
|
||||
#include "context.h"
|
||||
|
|
5
ximage.c
5
ximage.c
|
@ -25,6 +25,9 @@ static void
|
|||
TmpXError(Display * d, XErrorEvent * ev)
|
||||
{
|
||||
_x_err = 1;
|
||||
return;
|
||||
d = NULL;
|
||||
ev = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -38,6 +41,7 @@ int
|
|||
__imlib_GetMaxXImageCount(Display *d)
|
||||
{
|
||||
return list_max_count;
|
||||
d = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -51,6 +55,7 @@ int
|
|||
__imlib_GetMaxXImageTotalSize(Display *d)
|
||||
{
|
||||
return list_max_mem;
|
||||
d = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in New Issue