forked from old/legacy-imlib2
cleaned up code a bit... :) minor speedup for sparse (lost of transparent
bits in images) for alpha blending :) SVN revision: 324
This commit is contained in:
parent
41dc30c3a0
commit
e902c92e81
4
Makefile
4
Makefile
|
@ -70,9 +70,9 @@ LN_S = ln -s
|
|||
LTLIBOBJS =
|
||||
MAKEINFO = makeinfo
|
||||
NM = /usr/bin/nm -B
|
||||
OBJDUMP =
|
||||
PACKAGE = imlib
|
||||
RANLIB = ranlib
|
||||
USE_SYMBOL_UNDERSCORE = no
|
||||
VERSION = 2.0
|
||||
pkglibdir = ${libdir}/loaders
|
||||
|
||||
|
@ -127,7 +127,7 @@ grab.o blend.o file.o rgbadraw.o api.o draw.o context.o updates.o \
|
|||
colormod.o
|
||||
imlib2_DEPENDENCIES = $(top_builddir)/libltdl/libltdlc.la
|
||||
imlib2_LDFLAGS =
|
||||
CFLAGS = -O6 -mpentiumpro -mcpu=pentiumpro -march=pentiumpro -malign-loops=2 -malign-jumps=2 -malign-functions=2 -g -W -Wall -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith
|
||||
CFLAGS = -O2 -mpentium -mcpu=pentium -march=pentium -malign-loops=2 -malign-jumps=2 -malign-functions=2 -g -W -Wall -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith
|
||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
|
|
50
api.c
50
api.c
|
@ -1,6 +1,7 @@
|
|||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/extensions/shape.h>
|
||||
#include <string.h>
|
||||
#include "common.h"
|
||||
#include "scale.h"
|
||||
#include "image.h"
|
||||
|
@ -54,7 +55,7 @@ Imlib_Image
|
|||
imlib_load_image(char *file)
|
||||
{
|
||||
return (Imlib_Image)
|
||||
__imlib_LoadImage(file, NULL, 0, 0, 0);
|
||||
__imlib_LoadImage(file, NULL, 0, 0, 0, NULL);
|
||||
}
|
||||
|
||||
Imlib_Image
|
||||
|
@ -63,21 +64,21 @@ imlib_load_image_with_progress_callback(char *file,
|
|||
char progress_granulatiy)
|
||||
{
|
||||
return (Imlib_Image)
|
||||
__imlib_LoadImage(file, (Imlib_Internal_Progress_Function)progress_function, progress_granulatiy, 0, 0);
|
||||
__imlib_LoadImage(file, (Imlib_Internal_Progress_Function)progress_function, progress_granulatiy, 0, 0, NULL);
|
||||
}
|
||||
|
||||
Imlib_Image
|
||||
imlib_load_image_immediately(char *file)
|
||||
{
|
||||
return (Imlib_Image)
|
||||
__imlib_LoadImage(file, NULL, 0, 1, 0);
|
||||
__imlib_LoadImage(file, NULL, 0, 1, 0, NULL);
|
||||
}
|
||||
|
||||
Imlib_Image
|
||||
imlib_load_image_without_cache(char *file)
|
||||
{
|
||||
return (Imlib_Image)
|
||||
__imlib_LoadImage(file, NULL, 0, 0, 1);
|
||||
__imlib_LoadImage(file, NULL, 0, 0, 1, NULL);
|
||||
}
|
||||
|
||||
Imlib_Image
|
||||
|
@ -86,14 +87,51 @@ imlib_load_image_with_progress_callback_without_cache (char *file,
|
|||
char progress_granulatiy)
|
||||
{
|
||||
return (Imlib_Image)
|
||||
__imlib_LoadImage(file, (Imlib_Internal_Progress_Function)progress_function, progress_granulatiy, 0, 1);
|
||||
__imlib_LoadImage(file, (Imlib_Internal_Progress_Function)progress_function, progress_granulatiy, 0, 1, NULL);
|
||||
}
|
||||
|
||||
Imlib_Image
|
||||
imlib_load_image_immediately_without_cache(char *file)
|
||||
{
|
||||
return (Imlib_Image)
|
||||
__imlib_LoadImage(file, NULL, 0, 1, 1);
|
||||
__imlib_LoadImage(file, NULL, 0, 1, 1, NULL);
|
||||
}
|
||||
|
||||
Imlib_Image
|
||||
imlib_load_image_with_progress_callback_and_error_return (char *file,
|
||||
Imlib_Progress_Function progress_function,
|
||||
char progress_granulatiy,
|
||||
Imlib_Load_Error *error_return)
|
||||
{
|
||||
Imlib_Image im = NULL;
|
||||
ImlibLoadError er;
|
||||
|
||||
if (!__imlib_FileExists(file))
|
||||
{
|
||||
*error_return = IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST;
|
||||
return NULL;
|
||||
}
|
||||
if (__imlib_FileIsDir(file))
|
||||
{
|
||||
*error_return = IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY;
|
||||
return NULL;
|
||||
}
|
||||
if (!__imlib_FileCanRead(file))
|
||||
{
|
||||
*error_return = IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_READ;
|
||||
return NULL;
|
||||
}
|
||||
im = (Imlib_Image)__imlib_LoadImage(file, (Imlib_Internal_Progress_Function)progress_function, progress_granulatiy, 0, 0, &er);
|
||||
if (im)
|
||||
*error_return = IMLIB_LOAD_ERROR_NONE;
|
||||
else
|
||||
{
|
||||
if (er == IMLIB_LOAD_ERROR_NONE)
|
||||
*error_return = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT;
|
||||
else
|
||||
*error_return = (Imlib_Load_Error)er;
|
||||
}
|
||||
return im;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
93
api.h
93
api.h
|
@ -13,13 +13,27 @@ typedef void * Imlib_Image;
|
|||
typedef void * Imlib_Color_Modifier;
|
||||
typedef void * Imlib_Updates;
|
||||
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_chanel_mask Imlib_Chanel_Mask;
|
||||
|
||||
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
|
||||
{
|
||||
IMLIB_OP_COPY,
|
||||
|
@ -28,6 +42,31 @@ enum _imlib_operation
|
|||
IMLIB_OP_RESHADE
|
||||
};
|
||||
|
||||
enum _imlib_chanel_mask
|
||||
{
|
||||
IMLIB_ALPHA = 1,
|
||||
IMLIB_RED = 2,
|
||||
IMLIB_GREEN = 4,
|
||||
IMLIB_BLUE = 8
|
||||
};
|
||||
|
||||
enum _imlib_load_error
|
||||
{
|
||||
IMLIB_LOAD_ERROR_NONE,
|
||||
IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST,
|
||||
IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY,
|
||||
IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_READ,
|
||||
IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT,
|
||||
IMLIB_LOAD_ERROR_PATH_TOO_LONG,
|
||||
IMLIB_LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT,
|
||||
IMLIB_LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY,
|
||||
IMLIB_LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE,
|
||||
IMLIB_LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS,
|
||||
IMLIB_LOAD_ERROR_OUT_OF_MEMORY,
|
||||
IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS,
|
||||
IMLIB_LOAD_ERROR_UNKNOWN
|
||||
};
|
||||
|
||||
typedef void (*Imlib_Progress_Function)(Imlib_Image *im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h);
|
||||
|
@ -48,6 +87,10 @@ Imlib_Image imlib_load_image_without_cache(char *file);
|
|||
Imlib_Image imlib_load_image_with_progress_callback_without_cache (char *file,
|
||||
Imlib_Progress_Function progress_function,
|
||||
char progress_granulatiy);
|
||||
Imlib_Image imlib_load_image_with_progress_callback_and_error_return (char *file,
|
||||
Imlib_Progress_Function progress_function,
|
||||
char progress_granulatiy,
|
||||
Imlib_Load_Error *error_return);
|
||||
Imlib_Image imlib_load_image_immediately_without_cache(char *file);
|
||||
|
||||
/* image destruction functions */
|
||||
|
@ -212,24 +255,48 @@ void imlib_image_scroll_rect(Imlib_Image image, int x, int y,
|
|||
int width, int height, int delta_x,
|
||||
int delta_y);
|
||||
void imlib_image_draw_line(Imlib_Image image, int x1, int y1, int x1, int y2,
|
||||
int red, int green, int blue, int alpha);
|
||||
Imlib_Color *color, Imlib_Channel_Mask,
|
||||
Imlib_Operation operation);
|
||||
void imlib_image_draw_rectangle(Imlib_Image image, int x, int y, int width,
|
||||
int height, int red, int green, int blue,
|
||||
int alpha);
|
||||
int height, Imlib_Color *color,
|
||||
Imlib_Channel_Mask, Imlib_Operation operation);
|
||||
void imlib_image_fill_rectangle(Imlib_Image image, int x, int y, int width,
|
||||
int height, int red, int green, int blue,
|
||||
int alpha);
|
||||
int height, Imlib_Color *color,
|
||||
Imlib_Channel_Mask, Imlib_Operation operation);
|
||||
void imlib_image_fill_rectangle_gradient(Imlib_Image image,
|
||||
int x, int y, int width, int height,
|
||||
int red_top_left, int green_top_left,
|
||||
int blue_top_left, int alpha_top_left,
|
||||
int red_top_right, int green_top_right,
|
||||
int blue_top_right, int alpha_top_right,
|
||||
int red_bottom_left, int green_bottom_left,
|
||||
int blue_bottom_left, int alpha_bottom_left,
|
||||
int red_bottom_right, int green_bottom_right,
|
||||
int blue_bottom_right, int alpha_bottom_right,);
|
||||
Imlib_Color *top_left_color,
|
||||
Imlib_Color *top_right_color,
|
||||
Imlib_Color *bottom_left_color,
|
||||
Imlib_Color *bottom_right_color,
|
||||
Imlib_Channel_Mask mask,
|
||||
Imlib_Operation operation);
|
||||
/* text functions needed */
|
||||
Imlib_Font imlib_load_font(char *font_name);
|
||||
void imlib_font_set_tab_size(Imlib_Font font, int size);
|
||||
void imlib_free_font(Imlib_Font font);
|
||||
void imlib_text_draw(Imlib_font font, Imlib_Image image, int x, int y,
|
||||
int width, int height, Imlib_Text_Direction direction,
|
||||
char *text, Imlib_Color *color,
|
||||
Imlib_Operation operation);
|
||||
void imlib_get_text_size(Imlib_font font, Imlib_Text_Direction direction,
|
||||
char *text, int *width_return,
|
||||
int *height_return);
|
||||
Imlib_Rectangle *imlib_get_text_in_text_size_and_position(Imlib_font font,
|
||||
Imlib_Text_Direction direction,
|
||||
int width, int height,
|
||||
char *text,
|
||||
int text_start_index,
|
||||
int text_length,
|
||||
int *num_rectangles_return);
|
||||
int imlib_get_character_index_and_location_in_text(Imlib_font font,
|
||||
Imlib_Text_Direction direction,
|
||||
int width, int height,
|
||||
char *text,
|
||||
int *x_return,
|
||||
int *y_return,
|
||||
int *width_return,
|
||||
int *height_return);
|
||||
|
||||
/* FIXME: have to figure out generic saving mechanism that lets savers have */
|
||||
/* options like quality, color , compression etc. */
|
||||
|
|
24
blend.c
24
blend.c
|
@ -128,7 +128,9 @@ __imlib_BlendRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
if (a < 255)
|
||||
if (a == 255)
|
||||
*p2 = *p1;
|
||||
else if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
|
@ -146,8 +148,6 @@ __imlib_BlendRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
nb = bb + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
}
|
||||
else
|
||||
*p2 = *p1;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -171,7 +171,9 @@ __imlib_BlendRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
if (a < 255)
|
||||
if (a == 255)
|
||||
*p2 = *p1;
|
||||
else if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
|
@ -193,8 +195,6 @@ __imlib_BlendRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
}
|
||||
else
|
||||
*p2 = *p1;
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -328,7 +328,7 @@ __imlib_AddCopyRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
|
@ -365,7 +365,7 @@ __imlib_AddCopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
|
@ -484,7 +484,7 @@ __imlib_SubCopyRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
|
@ -521,7 +521,7 @@ __imlib_SubCopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
|
@ -641,7 +641,7 @@ __imlib_ReCopyRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
|
@ -678,7 +678,7 @@ __imlib_ReCopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
DATA8 a, nr, ng, nb, r, g, b, rr, gg, bb, aa, na;
|
||||
DATA8 nr, ng, nb, r, g, b, rr, gg, bb;
|
||||
int tmp;
|
||||
|
||||
p1 = src + (y * (w + src_jump));
|
||||
|
|
46
blend.h
46
blend.h
|
@ -11,6 +11,12 @@ enum _imlibop
|
|||
OP_RESHADE
|
||||
};
|
||||
|
||||
void
|
||||
__imlib_BlendImageToImage(ImlibImage *im_src, ImlibImage *im_dst,
|
||||
char aa, char blend, char merge_alpha,
|
||||
int ssx, int ssy, int ssw, int ssh,
|
||||
int ddx, int ddy, int ddw, int ddh,
|
||||
ImlibColorModifier *cm, ImlibOp op);
|
||||
void
|
||||
__imlib_BlendRGBAToData(DATA32 *src, int src_w, int src_h, DATA32 *dst,
|
||||
int dst_w, int dst_h, int sx, int sy, int dx, int dy,
|
||||
|
@ -29,9 +35,39 @@ void
|
|||
__imlib_CopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_BlendImageToImage(ImlibImage *im_src, ImlibImage *im_dst,
|
||||
char aa, char blend, char merge_alpha,
|
||||
int ssx, int ssy, int ssw, int ssh,
|
||||
int ddx, int ddy, int ddw, int ddh,
|
||||
ImlibColorModifier *cm, ImlibOp op);
|
||||
__imlib_AddBlendRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_AddBlendRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_AddCopyRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_AddCopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_SubBlendRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_SubBlendRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_SubCopyRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_SubCopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_ReBlendRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_ReBlendRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_ReCopyRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
void
|
||||
__imlib_ReCopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
||||
int w, int h);
|
||||
#endif
|
||||
|
|
21
file.c
21
file.c
|
@ -1,4 +1,5 @@
|
|||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
|
@ -61,6 +62,26 @@ __imlib_FileIsDir(char *s)
|
|||
return(0);
|
||||
}
|
||||
|
||||
int
|
||||
__imlib_FilePermissions(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return 0;
|
||||
if (!stat(s, &st) < 0)
|
||||
return 0;
|
||||
return st.st_mode;
|
||||
}
|
||||
|
||||
int
|
||||
__imlib_FileCanRead(char *s)
|
||||
{
|
||||
if (!(__imlib_FilePermissions(s) & (S_IRUSR | S_IRGRP | S_IROTH)))
|
||||
return 0;
|
||||
return (1 + access(s, R_OK));
|
||||
}
|
||||
|
||||
char **
|
||||
__imlib_FileDir(char *dir, int *num)
|
||||
{
|
||||
|
|
75
image.c
75
image.c
|
@ -2,6 +2,11 @@
|
|||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <dlfcn.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include "image.h"
|
||||
#include "file.h"
|
||||
|
@ -624,7 +629,8 @@ __imlib_LoadImage(char *file,
|
|||
void (*progress)(ImlibImage *im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h),
|
||||
char progress_granularity, char immediate_load, char dont_cache)
|
||||
char progress_granularity, char immediate_load, char dont_cache,
|
||||
ImlibLoadError *er)
|
||||
{
|
||||
ImlibImage *im;
|
||||
ImlibLoader *best_loader;
|
||||
|
@ -670,8 +676,42 @@ __imlib_LoadImage(char *file,
|
|||
__imlib_RescanLoaders();
|
||||
/* take a guess by extension on the best loader to use */
|
||||
best_loader = __imlib_FindBestLoaderForFile(file);
|
||||
errno = 0;
|
||||
if (best_loader)
|
||||
best_loader->load(im, progress, progress_granularity, immediate_load);
|
||||
if (er)
|
||||
{
|
||||
*er = LOAD_ERROR_NONE;
|
||||
if (errno != 0)
|
||||
{
|
||||
*er = LOAD_ERROR_UNKNOWN;
|
||||
if (errno == EEXIST)
|
||||
*er = LOAD_ERROR_FILE_DOES_NOT_EXIST;
|
||||
else if (errno == EISDIR)
|
||||
*er = LOAD_ERROR_FILE_IS_DIRECTORY;
|
||||
else if (errno == EISDIR)
|
||||
*er = LOAD_ERROR_FILE_IS_DIRECTORY;
|
||||
else if (errno == EACCES)
|
||||
*er = LOAD_ERROR_PERMISSION_DENIED_TO_READ;
|
||||
else if (errno == ENAMETOOLONG)
|
||||
*er = LOAD_ERROR_PATH_TOO_LONG;
|
||||
else if (errno == ENOENT)
|
||||
*er = LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT;
|
||||
else if (errno == ENOTDIR)
|
||||
*er = LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY;
|
||||
else if (errno == EFAULT)
|
||||
*er = LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE;
|
||||
else if (errno == ELOOP)
|
||||
*er = LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS;
|
||||
else if (errno == ENOMEM)
|
||||
*er = LOAD_ERROR_OUT_OF_MEMORY;
|
||||
else if (errno == EMFILE)
|
||||
*er = LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS;
|
||||
__imlib_ConsumeImage(im);
|
||||
return NULL;
|
||||
}
|
||||
errno = 0;
|
||||
}
|
||||
/* width is still 0 - the laoder didnt manage to do anything */
|
||||
if (im->w == 0)
|
||||
{
|
||||
|
@ -686,6 +726,39 @@ __imlib_LoadImage(char *file,
|
|||
/* if it failed - advance */
|
||||
if (im->w == 0)
|
||||
{
|
||||
if (er)
|
||||
{
|
||||
*er = LOAD_ERROR_NONE;
|
||||
if (errno != 0)
|
||||
{
|
||||
*er = LOAD_ERROR_UNKNOWN;
|
||||
if (errno == EEXIST)
|
||||
*er = LOAD_ERROR_FILE_DOES_NOT_EXIST;
|
||||
else if (errno == EISDIR)
|
||||
*er = LOAD_ERROR_FILE_IS_DIRECTORY;
|
||||
else if (errno == EISDIR)
|
||||
*er = LOAD_ERROR_FILE_IS_DIRECTORY;
|
||||
else if (errno == EACCES)
|
||||
*er = LOAD_ERROR_PERMISSION_DENIED_TO_READ;
|
||||
else if (errno == ENAMETOOLONG)
|
||||
*er = LOAD_ERROR_PATH_TOO_LONG;
|
||||
else if (errno == ENOENT)
|
||||
*er = LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT;
|
||||
else if (errno == ENOTDIR)
|
||||
*er = LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY;
|
||||
else if (errno == EFAULT)
|
||||
*er = LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE;
|
||||
else if (errno == ELOOP)
|
||||
*er = LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS;
|
||||
else if (errno == ENOMEM)
|
||||
*er = LOAD_ERROR_OUT_OF_MEMORY;
|
||||
else if (errno == EMFILE)
|
||||
*er = LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS;
|
||||
__imlib_ConsumeImage(im);
|
||||
return NULL;
|
||||
}
|
||||
errno = 0;
|
||||
}
|
||||
previous_l = l;
|
||||
l = l->next;
|
||||
}
|
||||
|
|
28
image.h
28
image.h
|
@ -9,6 +9,24 @@ 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
|
||||
{
|
||||
LOAD_ERROR_NONE,
|
||||
LOAD_ERROR_FILE_DOES_NOT_EXIST,
|
||||
LOAD_ERROR_FILE_IS_DIRECTORY,
|
||||
LOAD_ERROR_PERMISSION_DENIED_TO_READ,
|
||||
LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT,
|
||||
LOAD_ERROR_PATH_TOO_LONG,
|
||||
LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT,
|
||||
LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY,
|
||||
LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE,
|
||||
LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS,
|
||||
LOAD_ERROR_OUT_OF_MEMORY,
|
||||
LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS,
|
||||
LOAD_ERROR_UNKNOWN
|
||||
};
|
||||
|
||||
enum _iflags
|
||||
{
|
||||
|
@ -115,11 +133,11 @@ ImlibLoader *__imlib_FindBestLoaderForFile(char *file);
|
|||
void __imlib_SetImageAlphaFlag(ImlibImage *im, char alpha);
|
||||
ImlibImage *__imlib_CreateImage(int w, int h, DATA32 *data);
|
||||
ImlibImage *__imlib_LoadImage(char *file,
|
||||
void (*progress)(ImlibImage *im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h),
|
||||
char progress_granularity, char immediate_load,
|
||||
char dont_cache);
|
||||
void (*progress)(ImlibImage *im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h),
|
||||
char progress_granularity, char immediate_load,
|
||||
char dont_cache, ImlibLoadError *er);
|
||||
ImlibImagePixmap *__imlib_FindImlibImagePixmapByID(Display *d, Pixmap p);
|
||||
void __imlib_FreeImage(ImlibImage *im);
|
||||
void __imlib_FreePixmap(Display *d, Pixmap p);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
# A brief demonstration of using Automake with Libtool. -*-Makefile-*-
|
||||
#
|
||||
AUTOMAKE_OPTIONS = no-dependencies foreign
|
||||
|
||||
if INSTALL_LTDL
|
||||
|
@ -20,25 +20,6 @@ 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,6 +10,9 @@
|
|||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
# A brief demonstration of using Automake with Libtool. -*-Makefile-*-
|
||||
#
|
||||
|
||||
|
||||
SHELL = @SHELL@
|
||||
|
||||
|
@ -70,9 +73,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
|
||||
|
@ -112,8 +115,8 @@ CCLD = $(CC)
|
|||
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
|
||||
HEADERS = $(include_HEADERS) $(noinst_HEADERS)
|
||||
|
||||
DIST_COMMON = README ./stamp-h.in COPYING.LIB Makefile.am Makefile.in \
|
||||
acconfig.h acinclude.m4 aclocal.m4 config.h.in configure configure.in
|
||||
DIST_COMMON = README ./stamp-h.in Makefile.am Makefile.in acinclude.m4 \
|
||||
aclocal.m4 config.h.in configure configure.in
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
@ -156,7 +159,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) acconfig.h
|
||||
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
@echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
|
||||
|
||||
|
@ -430,25 +433,10 @@ 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.
|
||||
## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||
## 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 40 AC_PROG_LIBTOOL
|
||||
# serial 35 AC_PROG_LIBTOOL
|
||||
AC_DEFUN(AC_PROG_LIBTOOL,
|
||||
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
|
||||
|
||||
|
@ -30,9 +30,8 @@ AC_CACHE_SAVE
|
|||
|
||||
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
||||
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
||||
LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
|
||||
LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
|
||||
DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
|
||||
LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
|
||||
DLLTOOL="$DLLTOOL" AS="$AS" \
|
||||
${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])
|
||||
|
@ -63,24 +62,25 @@ 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.
|
||||
libtool_flags="--cache-file=$cache_file"
|
||||
#
|
||||
# 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"
|
||||
#
|
||||
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,28 +116,33 @@ case "$host" in
|
|||
fi
|
||||
;;
|
||||
|
||||
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)
|
||||
*-*-cygwin*)
|
||||
AC_SYS_LIBTOOL_CYGWIN
|
||||
;;
|
||||
])
|
||||
|
||||
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 - 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_LIBTOOL_DLOPEN - check for dlopen support
|
||||
AC_DEFUN(AC_LIBTOOL_DLOPEN, [lt_dlopen=yes])
|
||||
|
||||
# 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, [dnl
|
||||
define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_SHARED,
|
||||
[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],
|
||||
|
@ -162,15 +167,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_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_SHARED(no)])
|
||||
AC_DEFUN(AC_DISABLE_SHARED,
|
||||
[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, [dnl
|
||||
define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_STATIC,
|
||||
[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],
|
||||
|
@ -195,16 +200,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_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_STATIC(no)])
|
||||
AC_DEFUN(AC_DISABLE_STATIC,
|
||||
[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, [dnl
|
||||
define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_FAST_INSTALL,
|
||||
[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],
|
||||
|
@ -229,8 +234,9 @@ 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_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_FAST_INSTALL(no)])
|
||||
AC_DEFUN(AC_DISABLE_FAST_INSTALL,
|
||||
[AC_ENABLE_FAST_INSTALL(no)])
|
||||
|
||||
|
||||
# AC_PROG_LD - find the path to the GNU or non-GNU linker
|
||||
AC_DEFUN(AC_PROG_LD,
|
||||
|
@ -248,7 +254,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
|
||||
|
@ -274,10 +280,10 @@ else
|
|||
fi
|
||||
AC_CACHE_VAL(ac_cv_path_LD,
|
||||
[if test -z "$LD"; then
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in $PATH; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
|
||||
if test -f "$ac_dir/$ac_prog"; 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.
|
||||
|
@ -322,10 +328,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}${PATH_SEPARATOR-:}"
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
|
||||
if test -f $ac_dir/nm; 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
|
||||
|
@ -349,22 +355,227 @@ AC_MSG_RESULT([$NM])
|
|||
AC_SUBST(NM)
|
||||
])
|
||||
|
||||
# AC_CHECK_LIBM - check for math library
|
||||
AC_DEFUN(AC_CHECK_LIBM,
|
||||
# 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_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
LIBM=
|
||||
case "$host" in
|
||||
*-*-beos* | *-*-cygwin*)
|
||||
# These system don't have libm
|
||||
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]'
|
||||
;;
|
||||
*-ncr-sysv4.3*)
|
||||
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
|
||||
AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
|
||||
cygwin* | mingw*)
|
||||
ac_symcode='[ABCDGISTW]'
|
||||
;;
|
||||
*)
|
||||
AC_CHECK_LIB(m, main, 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]'
|
||||
;;
|
||||
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
|
||||
|
@ -375,14 +586,13 @@ esac
|
|||
# '${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_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
|
||||
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
|
||||
|
@ -394,23 +604,16 @@ AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
|||
# 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_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
|
||||
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
|
||||
])
|
||||
if test x"$enable_ltdl_install" = x"yes"; then
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-install"
|
||||
if test x"$enable_ltdl_install" != x"no"; then
|
||||
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
|
||||
])
|
||||
|
||||
|
@ -422,6 +625,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
|
||||
|
||||
dnl This is just to silence aclocal about the macro not being used
|
||||
ifelse([AC_DISABLE_FAST_INSTALL])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
|
||||
|
|
|
@ -11,7 +11,7 @@ dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|||
dnl PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
# serial 40 AC_PROG_LIBTOOL
|
||||
# serial 35 AC_PROG_LIBTOOL
|
||||
AC_DEFUN(AC_PROG_LIBTOOL,
|
||||
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
|
||||
|
||||
|
@ -20,9 +20,8 @@ AC_CACHE_SAVE
|
|||
|
||||
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
||||
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
||||
LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
|
||||
LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
|
||||
DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
|
||||
LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
|
||||
DLLTOOL="$DLLTOOL" AS="$AS" \
|
||||
${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])
|
||||
|
@ -53,6 +52,8 @@ 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
|
||||
|
||||
|
@ -61,16 +62,10 @@ 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.
|
||||
|
@ -106,28 +101,33 @@ case "$host" in
|
|||
fi
|
||||
;;
|
||||
|
||||
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)
|
||||
*-*-cygwin*)
|
||||
AC_SYS_LIBTOOL_CYGWIN
|
||||
;;
|
||||
])
|
||||
|
||||
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 - 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_LIBTOOL_DLOPEN - check for dlopen support
|
||||
AC_DEFUN(AC_LIBTOOL_DLOPEN, [lt_dlopen=yes])
|
||||
|
||||
# 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, [dnl
|
||||
define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_SHARED,
|
||||
[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_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_SHARED(no)])
|
||||
AC_DEFUN(AC_DISABLE_SHARED,
|
||||
[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, [dnl
|
||||
define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_STATIC,
|
||||
[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_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_STATIC(no)])
|
||||
AC_DEFUN(AC_DISABLE_STATIC,
|
||||
[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, [dnl
|
||||
define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_DEFUN(AC_ENABLE_FAST_INSTALL,
|
||||
[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,8 +219,9 @@ 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_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_ENABLE_FAST_INSTALL(no)])
|
||||
AC_DEFUN(AC_DISABLE_FAST_INSTALL,
|
||||
[AC_ENABLE_FAST_INSTALL(no)])
|
||||
|
||||
|
||||
# AC_PROG_LD - find the path to the GNU or non-GNU linker
|
||||
AC_DEFUN(AC_PROG_LD,
|
||||
|
@ -238,7 +239,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
|
||||
|
@ -264,10 +265,10 @@ else
|
|||
fi
|
||||
AC_CACHE_VAL(ac_cv_path_LD,
|
||||
[if test -z "$LD"; then
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in $PATH; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
|
||||
if test -f "$ac_dir/$ac_prog"; 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.
|
||||
|
@ -312,10 +313,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}${PATH_SEPARATOR-:}"
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
|
||||
if test -f $ac_dir/nm; 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
|
||||
|
@ -339,22 +340,227 @@ AC_MSG_RESULT([$NM])
|
|||
AC_SUBST(NM)
|
||||
])
|
||||
|
||||
# AC_CHECK_LIBM - check for math library
|
||||
AC_DEFUN(AC_CHECK_LIBM,
|
||||
# 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_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
LIBM=
|
||||
case "$host" in
|
||||
*-*-beos* | *-*-cygwin*)
|
||||
# These system don't have libm
|
||||
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]'
|
||||
;;
|
||||
*-ncr-sysv4.3*)
|
||||
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
|
||||
AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
|
||||
cygwin* | mingw*)
|
||||
ac_symcode='[ABCDGISTW]'
|
||||
;;
|
||||
*)
|
||||
AC_CHECK_LIB(m, main, 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]'
|
||||
;;
|
||||
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
|
||||
|
@ -365,14 +571,13 @@ esac
|
|||
# '${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_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
|
||||
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
|
||||
|
@ -384,23 +589,16 @@ AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
|||
# 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_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
|
||||
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
|
||||
])
|
||||
if test x"$enable_ltdl_install" = x"yes"; then
|
||||
ac_configure_args="$ac_configure_args --enable-ltdl-install"
|
||||
if test x"$enable_ltdl_install" != x"no"; then
|
||||
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
|
||||
])
|
||||
|
||||
|
@ -412,9 +610,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
|
||||
|
||||
dnl This is just to silence aclocal about the macro not being used
|
||||
ifelse([AC_DISABLE_FAST_INSTALL])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
|
||||
|
||||
# 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,6 +75,18 @@
|
|||
/* 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,21 +30,19 @@ 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)
|
||||
|
||||
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
|
||||
(
|
||||
rm -f conftest
|
||||
./libtool --config > conftest
|
||||
. ./conftest
|
||||
last=
|
||||
for spec in $library_names_spec; do
|
||||
last="$spec"
|
||||
done
|
||||
rm -f conftest
|
||||
changequote(, )
|
||||
echo "$last" | sed 's/\[.*\]//;s/^[^.]*//;s/\$.*$//;s/\.$//' > conftest
|
||||
echo "$last" | sed 's/^[^.]*//;s/\$.*$//;s/\.$//' > conftest
|
||||
changequote([, ])
|
||||
)
|
||||
libltdl_cv_shlibext=`cat conftest`
|
||||
|
@ -56,14 +54,34 @@ if test -n "$libltdl_cv_shlibext"; then
|
|||
fi
|
||||
|
||||
AC_CACHE_CHECK([which variable specifies run-time library path],
|
||||
libltdl_cv_shlibpath_var, [libltdl_cv_shlibpath_var="$shlibpath_var"])
|
||||
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
|
||||
])
|
||||
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, [libltdl_cv_objdir="$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
|
||||
])
|
||||
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. ])
|
||||
|
@ -71,241 +89,55 @@ 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(strchr index, break)
|
||||
AC_CHECK_FUNCS(strrchr rindex, break)
|
||||
AC_CHECK_FUNCS(strdup strchr strrchr index rindex)
|
||||
|
||||
AC_CACHE_CHECK([whether libtool supports -dlopen/-dlpreopen],
|
||||
libltdl_cv_preloaded_symbols, [dnl
|
||||
if test -n "$global_symbol_pipe"; then
|
||||
libltdl_cv_preloaded_symbols=yes
|
||||
else
|
||||
libltdl_cv_preloaded_symbols=no
|
||||
fi
|
||||
(
|
||||
rm -f conftest
|
||||
./libtool --config > conftest
|
||||
. ./conftest
|
||||
rm -f conftest
|
||||
if test -n "$global_symbol_pipe"; then
|
||||
echo yes > conftest
|
||||
else
|
||||
echo no > conftest
|
||||
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_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_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_SUBST(LIBADD_DL)
|
||||
|
||||
if test "x$ac_cv_func_dlopen" = xyes || test "x$ac_cv_lib_dl_dlopen" = xyes; then
|
||||
if test "$test_dlerror" = yes; then
|
||||
LIBS_SAVE="$LIBS"
|
||||
LIBS="$LIBS $LIBADD_DL"
|
||||
AC_CHECK_FUNCS(dlerror)
|
||||
LIBS="$LIBS_SAVE"
|
||||
fi
|
||||
|
||||
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
|
||||
AC_SYS_SYMBOL_UNDERSCORE
|
||||
if test x"$USE_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],
|
||||
|
@ -352,7 +184,7 @@ if test x"$ac_cv_sys_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) { dlclose(self); exit(0); } } exit(1); }
|
||||
if(ptr1 && !ptr2) exit(0); } exit(1); }
|
||||
], libltdl_cv_need_uscore=no, libltdl_cv_need_uscore=yes,
|
||||
libltdl_cv_need_uscore=cross
|
||||
)])
|
||||
|
|
294
libltdl/ltdl.c
294
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@ffii.org>
|
||||
Originally by Thomas Tanner <tanner@gmx.de>
|
||||
This file is part of GNU Libtool.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
|
@ -8,11 +8,6 @@ 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
|
||||
|
@ -81,16 +76,12 @@ 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";
|
||||
|
@ -104,17 +95,17 @@ const lt_dlsymlist lt_preloaded_symbols[1] = { { 0, 0 } };
|
|||
|
||||
static const char *last_error = 0;
|
||||
|
||||
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;
|
||||
lt_ptr_t (*lt_dlmalloc) __P((size_t size)) = malloc;
|
||||
void (*lt_dlfree) __P((lt_ptr_t ptr)) = free;
|
||||
|
||||
typedef struct lt_dltype_t {
|
||||
struct lt_dltype_t *next;
|
||||
const char *sym_prefix; /* prefix for symbols */
|
||||
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));
|
||||
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));
|
||||
} lt_dltype_t;
|
||||
|
||||
#define LTDL_TYPE_TOP 0
|
||||
|
@ -165,7 +156,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;
|
||||
|
@ -192,7 +183,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)
|
||||
|
@ -213,6 +204,10 @@ 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
|
||||
|
@ -246,77 +241,65 @@ strrchr(str, ch)
|
|||
#endif
|
||||
|
||||
static int
|
||||
sys_dl_init LTDL_PARAMS((void))
|
||||
dl_init ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_dl_exit LTDL_PARAMS((void))
|
||||
dl_exit ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_dl_open (handle, filename)
|
||||
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
|
||||
sys_dl_close (handle)
|
||||
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
|
||||
sys_dl_sym (handle, symbol)
|
||||
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
|
||||
sys_dl = { LTDL_TYPE_TOP, "_", sys_dl_init, sys_dl_exit,
|
||||
sys_dl_open, sys_dl_close, sys_dl_sym };
|
||||
dl = { LTDL_TYPE_TOP, "_", dl_init, dl_exit,
|
||||
dl_open, dl_close, dl_sym };
|
||||
#else
|
||||
sys_dl = { LTDL_TYPE_TOP, 0, sys_dl_init, sys_dl_exit,
|
||||
sys_dl_open, sys_dl_close, sys_dl_sym };
|
||||
dl = { LTDL_TYPE_TOP, 0, dl_init, dl_exit,
|
||||
dl_open, dl_close, dl_sym };
|
||||
#endif
|
||||
|
||||
#undef LTDL_TYPE_TOP
|
||||
#define LTDL_TYPE_TOP &sys_dl
|
||||
#define LTDL_TYPE_TOP &dl
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -361,66 +344,66 @@ sys_dl = { LTDL_TYPE_TOP, 0, sys_dl_init, sys_dl_exit,
|
|||
#define BIND_RESTRICTED 0
|
||||
#endif /* BIND_RESTRICTED */
|
||||
|
||||
#define LTDL_BIND_FLAGS (BIND_IMMEDIATE | BIND_NONFATAL | DYNAMIC_PATH)
|
||||
#define LTDL_BIND_FLAGS (BIND_IMMEDIATE | BIND_NONFATAL | BIND_VERBOSE | DYNAMIC_PATH)
|
||||
|
||||
static int
|
||||
sys_shl_init LTDL_PARAMS((void))
|
||||
shl_init ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_shl_exit LTDL_PARAMS((void))
|
||||
shl_exit ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_shl_open (handle, filename)
|
||||
shl_open (handle, filename)
|
||||
lt_dlhandle handle;
|
||||
const char *filename;
|
||||
{
|
||||
handle->handle = shl_load(filename, LTDL_BIND_FLAGS, 0L);
|
||||
if (!handle->handle) {
|
||||
last_error = cannot_open_error;
|
||||
last_error = unknown_error;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_shl_close (handle)
|
||||
shl_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
if (shl_unload((shl_t) (handle->handle)) != 0) {
|
||||
last_error = cannot_close_error;
|
||||
last_error = unknown_error;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static lt_ptr_t
|
||||
sys_shl_sym (handle, symbol)
|
||||
shl_sym (handle, symbol)
|
||||
lt_dlhandle handle;
|
||||
const char *symbol;
|
||||
{
|
||||
lt_ptr_t address;
|
||||
|
||||
if (handle->handle && shl_findsym((shl_t*) &(handle->handle),
|
||||
symbol, TYPE_UNDEFINED, &address) == 0)
|
||||
if (address)
|
||||
return address;
|
||||
last_error = symbol_error;
|
||||
return 0;
|
||||
if (shl_findsym((shl_t) (handle->handle), symbol, TYPE_UNDEFINED,
|
||||
&address) != 0 || !(handle->handle) || !address) {
|
||||
last_error = unknown_error;
|
||||
return 0;
|
||||
}
|
||||
return address;
|
||||
}
|
||||
|
||||
static
|
||||
lt_dltype_t
|
||||
sys_shl = { LTDL_TYPE_TOP, 0, sys_shl_init, sys_shl_exit,
|
||||
sys_shl_open, sys_shl_close, sys_shl_sym };
|
||||
shl = { LTDL_TYPE_TOP, 0, shl_init, shl_exit,
|
||||
shl_open, shl_close, shl_sym };
|
||||
|
||||
#undef LTDL_TYPE_TOP
|
||||
#define LTDL_TYPE_TOP &sys_shl
|
||||
#define LTDL_TYPE_TOP &shl
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -433,19 +416,19 @@ sys_shl = { LTDL_TYPE_TOP, 0, sys_shl_init, sys_shl_exit,
|
|||
#endif
|
||||
|
||||
static int
|
||||
sys_dld_init LTDL_PARAMS((void))
|
||||
dld_init ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_dld_exit LTDL_PARAMS((void))
|
||||
dld_exit ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_dld_open (handle, filename)
|
||||
dld_open (handle, filename)
|
||||
lt_dlhandle handle;
|
||||
const char *filename;
|
||||
{
|
||||
|
@ -455,7 +438,7 @@ sys_dld_open (handle, filename)
|
|||
return 1;
|
||||
}
|
||||
if (dld_link(filename) != 0) {
|
||||
last_error = cannot_open_error;
|
||||
last_error = unknown_error;
|
||||
lt_dlfree(handle->handle);
|
||||
return 1;
|
||||
}
|
||||
|
@ -463,11 +446,11 @@ sys_dld_open (handle, filename)
|
|||
}
|
||||
|
||||
static int
|
||||
sys_dld_close (handle)
|
||||
dld_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
if (dld_unlink_by_file((char*)(handle->handle), 1) != 0) {
|
||||
last_error = cannot_close_error;
|
||||
last_error = unknown_error;
|
||||
return 1;
|
||||
}
|
||||
lt_dlfree(handle->filename);
|
||||
|
@ -475,24 +458,24 @@ sys_dld_close (handle)
|
|||
}
|
||||
|
||||
static lt_ptr_t
|
||||
sys_dld_sym (handle, symbol)
|
||||
dld_sym (handle, symbol)
|
||||
lt_dlhandle handle;
|
||||
const char *symbol;
|
||||
{
|
||||
lt_ptr_t address = dld_get_func(symbol);
|
||||
|
||||
if (!address)
|
||||
last_error = symbol_error;
|
||||
last_error = unknown_error;
|
||||
return address;
|
||||
}
|
||||
|
||||
static
|
||||
lt_dltype_t
|
||||
sys_dld = { LTDL_TYPE_TOP, 0, sys_dld_init, sys_dld_exit,
|
||||
sys_dld_open, sys_dld_close, sys_dld_sym };
|
||||
dld = { LTDL_TYPE_TOP, 0, dld_init, dld_exit,
|
||||
dld_open, dld_close, dld_sym };
|
||||
|
||||
#undef LTDL_TYPE_TOP
|
||||
#define LTDL_TYPE_TOP &sys_dld
|
||||
#define LTDL_TYPE_TOP &dld
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -503,178 +486,60 @@ sys_dld = { LTDL_TYPE_TOP, 0, sys_dld_init, sys_dld_exit,
|
|||
#include <windows.h>
|
||||
|
||||
static int
|
||||
sys_wll_init LTDL_PARAMS((void))
|
||||
wll_init ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_wll_exit LTDL_PARAMS((void))
|
||||
wll_exit ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Forward declaration; required to implement handle search below. */
|
||||
static lt_dlhandle handles;
|
||||
|
||||
static int
|
||||
sys_wll_open (handle, filename)
|
||||
wll_open (handle, filename)
|
||||
lt_dlhandle handle;
|
||||
const char *filename;
|
||||
{
|
||||
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;
|
||||
handle->handle = LoadLibrary(filename);
|
||||
if (!handle->handle) {
|
||||
last_error = unknown_error;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
sys_wll_close (handle)
|
||||
wll_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
if (FreeLibrary(handle->handle) == 0) {
|
||||
last_error = cannot_close_error;
|
||||
if (FreeLibrary(handle->handle) != 0) {
|
||||
last_error = unknown_error;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static lt_ptr_t
|
||||
sys_wll_sym (handle, symbol)
|
||||
wll_sym (handle, symbol)
|
||||
lt_dlhandle handle;
|
||||
const char *symbol;
|
||||
{
|
||||
lt_ptr_t address = GetProcAddress(handle->handle, symbol);
|
||||
|
||||
if (!address)
|
||||
last_error = symbol_error;
|
||||
last_error = unknown_error;
|
||||
return address;
|
||||
}
|
||||
|
||||
static
|
||||
lt_dltype_t
|
||||
sys_wll = { LTDL_TYPE_TOP, 0, sys_wll_init, sys_wll_exit,
|
||||
sys_wll_open, sys_wll_close, sys_wll_sym };
|
||||
wll = { LTDL_TYPE_TOP, 0, wll_init, wll_exit,
|
||||
wll_open, wll_close, wll_sym };
|
||||
|
||||
#undef LTDL_TYPE_TOP
|
||||
#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
|
||||
#define LTDL_TYPE_TOP &wll
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -689,7 +554,7 @@ static const lt_dlsymlist *default_preloaded_symbols = 0;
|
|||
static lt_dlsymlists_t *preloaded_symbols = 0;
|
||||
|
||||
static int
|
||||
presym_init LTDL_PARAMS((void))
|
||||
presym_init ()
|
||||
{
|
||||
preloaded_symbols = 0;
|
||||
if (default_preloaded_symbols)
|
||||
|
@ -698,7 +563,7 @@ presym_init LTDL_PARAMS((void))
|
|||
}
|
||||
|
||||
static int
|
||||
presym_free_symlists LTDL_PARAMS((void))
|
||||
presym_free_symlists ()
|
||||
{
|
||||
lt_dlsymlists_t *lists = preloaded_symbols;
|
||||
|
||||
|
@ -713,7 +578,7 @@ presym_free_symlists LTDL_PARAMS((void))
|
|||
}
|
||||
|
||||
static int
|
||||
presym_exit LTDL_PARAMS((void))
|
||||
presym_exit ()
|
||||
{
|
||||
presym_free_symlists();
|
||||
return 0;
|
||||
|
@ -785,8 +650,6 @@ static int
|
|||
presym_close (handle)
|
||||
lt_dlhandle handle;
|
||||
{
|
||||
/* Just to silence gcc -Wall */
|
||||
handle = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -823,7 +686,7 @@ static lt_dltype_t *types = LTDL_TYPE_TOP;
|
|||
#undef LTDL_TYPE_TOP
|
||||
|
||||
int
|
||||
lt_dlinit LTDL_PARAMS((void))
|
||||
lt_dlinit ()
|
||||
{
|
||||
/* initialize libltdl */
|
||||
lt_dltype_t **type = &types;
|
||||
|
@ -874,7 +737,7 @@ lt_dlpreload_default (preloaded)
|
|||
}
|
||||
|
||||
int
|
||||
lt_dlexit LTDL_PARAMS((void))
|
||||
lt_dlexit ()
|
||||
{
|
||||
/* shut down libltdl */
|
||||
lt_dltype_t *type = types;
|
||||
|
@ -1112,8 +975,6 @@ load_deplibs(handle, deplibs)
|
|||
/* FIXME: load deplibs */
|
||||
handle->depcount = 0;
|
||||
handle->deplibs = 0;
|
||||
/* Just to silence gcc -Wall */
|
||||
deplibs = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1122,8 +983,6 @@ unload_deplibs(handle)
|
|||
lt_dlhandle handle;
|
||||
{
|
||||
/* FIXME: unload deplibs */
|
||||
/* Just to silence gcc -Wall */
|
||||
handle = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1135,7 +994,7 @@ trim (dest, str)
|
|||
/* remove the leading and trailing "'" from str
|
||||
and store the result in dest */
|
||||
char *tmp;
|
||||
const char *end = strrchr(str, '\'');
|
||||
char *end = strrchr(str, '\'');
|
||||
int len = strlen(str);
|
||||
|
||||
if (*dest)
|
||||
|
@ -1240,7 +1099,7 @@ lt_dlopen (filename)
|
|||
}
|
||||
/* canonicalize the module name */
|
||||
for (i = 0; i < ext - basename; i++)
|
||||
if (isalnum((int)(basename[i])))
|
||||
if (isalnum(basename[i]))
|
||||
name[i] = basename[i];
|
||||
else
|
||||
name[i] = '_';
|
||||
|
@ -1558,7 +1417,7 @@ lt_dlsym (handle, symbol)
|
|||
}
|
||||
|
||||
const char *
|
||||
lt_dlerror LTDL_PARAMS((void))
|
||||
lt_dlerror ()
|
||||
{
|
||||
const char *error = last_error;
|
||||
|
||||
|
@ -1581,12 +1440,11 @@ lt_dladdsearchdir (search_dir)
|
|||
} else {
|
||||
char *new_search_path = (char*)
|
||||
lt_dlmalloc(strlen(user_search_path) +
|
||||
strlen(search_dir) + 2); /* ':' + '\0' == 2 */
|
||||
strlen(search_dir) + 1);
|
||||
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);
|
||||
|
@ -1611,7 +1469,7 @@ lt_dlsetsearchpath (search_path)
|
|||
}
|
||||
|
||||
const char *
|
||||
lt_dlgetsearchpath LTDL_PARAMS((void))
|
||||
lt_dlgetsearchpath ()
|
||||
{
|
||||
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@ffii.org>
|
||||
Originally by Thomas Tanner <tanner@gmx.de>
|
||||
This file is part of GNU Libtool.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
|
@ -8,11 +8,6 @@ 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
|
||||
|
@ -40,16 +35,16 @@ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||
# define __END_DECLS /* empty */
|
||||
#endif
|
||||
|
||||
/* LTDL_PARAMS is a macro used to wrap function prototypes, so that compilers
|
||||
/* __P 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 LTDL_PARAMS
|
||||
#undef __P
|
||||
#undef lt_ptr_t
|
||||
#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32) || defined(__cplusplus)
|
||||
# define LTDL_PARAMS(protos) protos
|
||||
# define __P(protos) protos
|
||||
# define lt_ptr_t void*
|
||||
#else
|
||||
# define LTDL_PARAMS(protos) ()
|
||||
# define __P(protos) ()
|
||||
# define lt_ptr_t char*
|
||||
#endif
|
||||
|
||||
|
@ -67,24 +62,24 @@ typedef struct {
|
|||
} lt_dlsymlist;
|
||||
|
||||
__BEGIN_DECLS
|
||||
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 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 const lt_dlsymlist lt_preloaded_symbols[];
|
||||
#define LTDL_SET_PRELOADED_SYMBOLS() lt_dlpreload_default(lt_preloaded_symbols)
|
||||
|
||||
extern lt_ptr_t (*lt_dlmalloc)LTDL_PARAMS((size_t size));
|
||||
extern void (*lt_dlfree)LTDL_PARAMS((lt_ptr_t ptr));
|
||||
extern lt_ptr_t (*lt_dlmalloc)__P((size_t size));
|
||||
extern void (*lt_dlfree)__P((lt_ptr_t ptr));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
|
|
@ -18,6 +18,19 @@ struct ImLib_JPEG_error_mgr
|
|||
};
|
||||
typedef struct ImLib_JPEG_error_mgr *emptr;
|
||||
|
||||
void _JPEGFatalErrorHandler(j_common_ptr cinfo);
|
||||
char load (ImlibImage *im,
|
||||
void (*progress)(ImlibImage *im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h),
|
||||
char progress_granularity, char immediate_load);
|
||||
char save (ImlibImage *im,
|
||||
void (*progress)(ImlibImage *im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h),
|
||||
char progress_granularity);
|
||||
void formats (ImlibLoader *l);
|
||||
|
||||
void
|
||||
_JPEGFatalErrorHandler(j_common_ptr cinfo)
|
||||
{
|
||||
|
|
16
loader_png.c
16
loader_png.c
|
@ -15,6 +15,18 @@
|
|||
/* PNG stuff */
|
||||
#define PNG_BYTES_TO_CHECK 4
|
||||
|
||||
char load (ImlibImage *im,
|
||||
void (*progress)(ImlibImage *im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h),
|
||||
char progress_granularity, char immediate_load);
|
||||
char save (ImlibImage *im,
|
||||
void (*progress)(ImlibImage *im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h),
|
||||
char progress_granularity);
|
||||
void formats (ImlibLoader *l);
|
||||
|
||||
char
|
||||
load (ImlibImage *im,
|
||||
void (*progress)(ImlibImage *im, char percent,
|
||||
|
@ -28,7 +40,6 @@ load (ImlibImage *im,
|
|||
FILE *f;
|
||||
png_structp png_ptr = NULL;
|
||||
png_infop info_ptr = NULL;
|
||||
unsigned char *data;
|
||||
int bit_depth, color_type, interlace_type;
|
||||
|
||||
/* if immediate_load is 1, then dont delay image laoding as below, or */
|
||||
|
@ -134,13 +145,14 @@ load (ImlibImage *im,
|
|||
lines[i] = ((unsigned char *)(im->data)) + (i * w * sizeof(DATA32));
|
||||
if (progress)
|
||||
{
|
||||
int x, y, count, prevy, pass, number_passes, per, nrows = 1;
|
||||
int y, count, prevy, pass, number_passes, per, nrows = 1;
|
||||
|
||||
count = 0;
|
||||
number_passes = png_set_interlace_handling(png_ptr);
|
||||
for (pass = 0; pass < number_passes; pass++)
|
||||
{
|
||||
prevy = 0;
|
||||
per = 0;
|
||||
for (y = 0; y < h; y += nrows)
|
||||
{
|
||||
png_read_rows(png_ptr, &lines[y], NULL, nrows);
|
||||
|
|
13
main.c
13
main.c
|
@ -177,17 +177,12 @@ int main (int argc, char **argv)
|
|||
im_bg = imlib_load_image(file);
|
||||
else
|
||||
im_bg = imlib_load_image("test_images/bg.png");
|
||||
border.left = 8;
|
||||
border.right = 8;
|
||||
border.top = 8;
|
||||
border.bottom = 8;
|
||||
imlib_image_set_border(im_bg, &border);
|
||||
w = imlib_image_get_width(im_bg);
|
||||
h = imlib_image_get_height(im_bg);
|
||||
wo = w;
|
||||
ho = h;
|
||||
w *= 10;
|
||||
h *= 10;
|
||||
w *= 1;
|
||||
h *= 1;
|
||||
XResizeWindow(disp, win, w, h);
|
||||
im = imlib_create_image(w, h);
|
||||
imlib_set_cache_size(4 * 1024 * 1024);
|
||||
|
@ -241,7 +236,7 @@ int main (int argc, char **argv)
|
|||
NULL, IMLIB_OP_COPY);
|
||||
}
|
||||
}
|
||||
/* imlib_blend_image_onto_image(im_sh1, im,
|
||||
imlib_blend_image_onto_image(im_sh1, im,
|
||||
aa, blend, 0,
|
||||
0, 0, 50, 50,
|
||||
0, 0, 50, 50, NULL, IMLIB_OP_COPY);
|
||||
|
@ -253,7 +248,7 @@ int main (int argc, char **argv)
|
|||
aa, blend, 0,
|
||||
0, 0, 50, 50,
|
||||
0, 50, 50, h - 50, NULL, IMLIB_OP_COPY);
|
||||
*/ imlib_render_image_on_drawable(im, disp, win, vis,
|
||||
imlib_render_image_on_drawable(im, disp, win, vis,
|
||||
cm, depth, dith, 1, 0, 0, NULL,
|
||||
IMLIB_OP_COPY);
|
||||
imlib_free_image(im_sh1);
|
||||
|
|
20
rend.c
20
rend.c
|
@ -30,7 +30,7 @@ __imlib_RenderImage(Display *d, ImlibImage *im,
|
|||
char anitalias, char hiq, char blend, char dither_mask,
|
||||
ImlibColorModifier *cmod, ImlibOp op)
|
||||
{
|
||||
XImage *xim, *mxim;
|
||||
XImage *xim = NULL, *mxim = NULL;
|
||||
Context *ct;
|
||||
DATA32 *buf = NULL, *pointer, *back = NULL;
|
||||
int y, h, hh, jump;
|
||||
|
@ -222,7 +222,23 @@ __imlib_RenderImage(Display *d, ImlibImage *im,
|
|||
/* if we have a back buffer - we're blending to the bg */
|
||||
if (back)
|
||||
{
|
||||
__imlib_BlendRGBAToRGBA(pointer, jump, back + (y * dw), 0, dw, hh);
|
||||
switch (op)
|
||||
{
|
||||
case OP_COPY:
|
||||
__imlib_BlendRGBAToRGB(pointer, jump, back + (y * dw), 0, dw, hh);
|
||||
break;
|
||||
case OP_ADD:
|
||||
__imlib_AddBlendRGBAToRGB(pointer, jump, back + (y * dw), 0, dw, hh);
|
||||
break;
|
||||
case OP_SUBTRACT:
|
||||
__imlib_SubBlendRGBAToRGB(pointer, jump, back + (y * dw), 0, dw, hh);
|
||||
break;
|
||||
case OP_RESHADE:
|
||||
__imlib_ReBlendRGBAToRGB(pointer, jump, back + (y * dw), 0, dw, hh);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
pointer = back + (y * dw);
|
||||
jump = 0;
|
||||
}
|
||||
|
|
|
@ -166,6 +166,7 @@ __imlib_BlurImage(ImlibImage *im, int rad)
|
|||
void
|
||||
__imlib_SharpenImage(ImlibImage *im, int rad)
|
||||
{
|
||||
/* FIXME: impliment */
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -245,7 +246,7 @@ void
|
|||
__imlib_TileImageVert(ImlibImage *im)
|
||||
{
|
||||
DATA32 *p1, *p2, *p, *data;
|
||||
int x, y, per, tmp, na, nr, ng, nb, mix, a, r, g, b, aa, rr, gg, bb;
|
||||
int x, y, tmp, na, nr, ng, nb, mix, a, r, g, b, aa, rr, gg, bb;
|
||||
|
||||
data = malloc(im->w * im->h * sizeof(DATA32));
|
||||
p = data;
|
||||
|
|
4
scale.c
4
scale.c
|
@ -523,7 +523,7 @@ __imlib_ScaleAARGBA(DATA32 **ypoints, int *xpoints, DATA32 *dest,
|
|||
|
||||
if ((XAP > 1) || (YAP > 1))
|
||||
{
|
||||
for (j = 0; j < YAP; j++)
|
||||
for (i = 0, j = 0; j < YAP; j++)
|
||||
{
|
||||
ssptr = ypoints[dyy + y] + (j * sow);
|
||||
for (i = 0; i < XAP; i++)
|
||||
|
@ -845,7 +845,7 @@ __imlib_ScaleAARGB(DATA32 **ypoints, int *xpoints, DATA32 *dest,
|
|||
|
||||
if ((XAP > 1) || (YAP > 1))
|
||||
{
|
||||
for (j = 0; j < YAP; j++)
|
||||
for (i = 0, j = 0; j < YAP; j++)
|
||||
{
|
||||
ssptr = ypoints[dyy + y] + (j * sow);
|
||||
for (i = 0; i < XAP; i++)
|
||||
|
|
Loading…
Reference in New Issue