From b96c10633782d697a4f5573099b0762630b45347 Mon Sep 17 00:00:00 2001 From: Bert Date: Thu, 8 Sep 2011 15:41:18 +0200 Subject: Overhauled building - config.h -> config.def.h - Create config.h during make, if it does not exist - Nice make output - Use XFLAGS and XLIBS to include additional compile-time features, which depend on third-party libraries --- .gitignore | 3 +- Makefile | 70 ++++++++++++++++++++-------- Makefile.netbsd | 2 +- config.def.h | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ config.h | 138 -------------------------------------------------------- image.c | 8 ++-- 6 files changed, 197 insertions(+), 162 deletions(-) create mode 100644 config.def.h delete mode 100644 config.h diff --git a/.gitignore b/.gitignore index 4a18685..bb71929 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ +config.h *.o sxiv cscope.out -release tags +release diff --git a/Makefile b/Makefile index 2b0b739..8cf5a9a 100644 --- a/Makefile +++ b/Makefile @@ -1,30 +1,64 @@ -all: sxiv +VERSION = git-20110908 -VERSION = git-20110906 - -CC = gcc -DESTDIR = -PREFIX = /usr/local -CFLAGS = -Wall -pedantic -O2 -DVERSION=\"$(VERSION)\" -DHAVE_GIFLIB +CC = gcc +CFLAGS = -Wall -pedantic -O2 LDFLAGS = -LIBS = -lX11 -lImlib2 -lgif +LIBS = -lX11 -lImlib2 + +PREFIX = /usr/local +MANPREFIX = $(PREFIX)/share/man SRC = commands.c image.c main.c options.c thumbs.c util.c window.c OBJ = $(SRC:.c=.o) -sxiv: $(OBJ) - $(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) +all: options sxiv -$(OBJ): Makefile config.h +options: + @echo "sxiv build options:" + @echo "CC = $(CC)" + @echo "CFLAGS = $(CFLAGS)" + @echo "XFLAGS = $(XFLAGS)" + @echo "LDFLAGS = $(LDFLAGS)" + @echo "XLIBS = $(XLIBS)" + @echo "PREFIX = $(PREFIX)" .c.o: - $(CC) $(CFLAGS) -c -o $@ $< + @echo "CC $<" + @$(CC) $(CFLAGS) $(XFLAGS) -DVERSION=\"$(VERSION)\" -c -o $@ $< -install: all - install -D -m 755 -o root -g root sxiv $(DESTDIR)$(PREFIX)/bin/sxiv - mkdir -p $(DESTDIR)$(PREFIX)/share/man/man1 - sed "s/VERSION/$(VERSION)/g" sxiv.1 > $(DESTDIR)$(PREFIX)/share/man/man1/sxiv.1 - chmod 644 $(DESTDIR)$(PREFIX)/share/man/man1/sxiv.1 +$(OBJ): Makefile config.h + +config.h: + @echo "creating $@ from config.def.h" + @cp config.def.h $@ + +sxiv: $(OBJ) + @echo "CC -o $@" + @$(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) $(XLIBS) clean: - rm -f $(OBJ) sxiv + @echo "cleaning" + @rm -f $(OBJ) sxiv sxiv-$(VERSION).tar.gz + +dist: clean + @echo "creating dist tarball" + @mkdir -p sxiv-$(VERSION) + @cp LICENSE Makefile Makefile.netbsd README.md config.def.h \ + sxiv.1 $(SRC) sxiv-$(VERSION) + @tar -cf sxiv-$(VERSION).tar sxiv-$(VERSION) + @gzip sxiv-$(VERSION).tar + @rm -rf sxiv-$(VERSION) + +install: all + @echo "installing executable file to $(DESTDIR)$(PREFIX)/bin" + @install -D -m 755 sxiv $(DESTDIR)$(PREFIX)/bin/sxiv + @echo "installing manual page to $(DESTDIR)$(MANPREFIX)/man1" + @mkdir -p $(DESTDIR)$(MANPREFIX)/man1 + @sed "s/VERSION/$(VERSION)/g" sxiv.1 > $(DESTDIR)$(MANPREFIX)/man1/sxiv.1 + @chmod 644 $(DESTDIR)$(MANPREFIX)/man1/sxiv.1 + +uninstall: + @echo "removing executable file from $(DESTDIR)$(PREFIX)/bin" + @rm -f $(DESTDIR)$(PREFIX)/bin/sxiv + @echo "removing manual page from $(DESTDIR)$(MANPREFIX)/man1" + @rm -f $(DESTDIR)$(MANPREFIX)/man1/sxiv.1 diff --git a/Makefile.netbsd b/Makefile.netbsd index 8dd0e23..50fad95 100644 --- a/Makefile.netbsd +++ b/Makefile.netbsd @@ -1,4 +1,4 @@ .include "Makefile" -CFLAGS = -Wall -pedantic -O2 -DVERSION=\"$(VERSION)\" -DHAVE_GIFLIB -I/usr/X11R7/include -I/usr/pkg/include +CFLAGS = -Wall -pedantic -O2 -I/usr/X11R7/include -I/usr/pkg/include LDFLAGS = -L/usr/X11R7/lib -Wl,-R/usr/X11R7/lib -L/usr/pkg/lib -Wl,-R/usr/pkg/lib diff --git a/config.def.h b/config.def.h new file mode 100644 index 0000000..d5a9463 --- /dev/null +++ b/config.def.h @@ -0,0 +1,138 @@ +#ifdef _WINDOW_CONFIG + +/* default window dimensions (overwritten via -g option): */ +enum { + WIN_WIDTH = 800, + WIN_HEIGHT = 600 +}; + +/* default color for window background: */ +static const char * const BG_COLOR = "#777777"; +/* default color for thumbnail selection: */ +static const char * const SEL_COLOR = "#DDDDDD"; +/* (see X(7) section "COLOR NAMES" for valid values) */ + +#endif +#ifdef _IMAGE_CONFIG + +/* how should images be scaled when they are loaded? + * (also controllable via -d/-s/-Z/-z options) + * SCALE_DOWN: 100%, but fit large images into window, + * SCALE_FIT: fit all images into window, + * SCALE_ZOOM: use current zoom level, 100% at startup + */ +static const scalemode_t SCALE_MODE = SCALE_DOWN; + +/* levels (percent) to use when zooming via '-' and '+': */ +static const float zoom_levels[] = { + 12.5, 25.0, 50.0, 75.0, + 100.0, 150.0, 200.0, 400.0, 800.0 +}; + +/* default settings for multi-frame gif images: */ +enum { + GIF_DELAY = 100, /* delay time (in ms) */ + GIF_AUTOPLAY = 1, /* autoplay when loaded [0/1] */ + GIF_LOOP = 0 /* endless loop [0/1] */ +}; + +#endif +#ifdef _THUMBS_CONFIG + +/* default dimension of thumbnails (width == height): */ +enum { THUMB_SIZE = 60 }; + +#endif +#ifdef _MAPPINGS_CONFIG + +/* keyboard mappings for image and thumbnail mode: */ +static const keymap_t keys[] = { + /* ctrl key function argument */ + { False, XK_q, it_quit, (arg_t) None }, + { False, XK_Return, it_switch_mode, (arg_t) None }, + { False, XK_f, it_toggle_fullscreen, (arg_t) None }, + + { False, XK_r, it_reload_image, (arg_t) None }, + { False, XK_D, it_remove_image, (arg_t) None }, + + { False, XK_n, i_navigate, (arg_t) +1 }, + { False, XK_space, i_navigate, (arg_t) +1 }, + { False, XK_p, i_navigate, (arg_t) -1 }, + { False, XK_BackSpace, i_navigate, (arg_t) -1 }, + { False, XK_bracketright, i_navigate, (arg_t) +10 }, + { False, XK_bracketleft, i_navigate, (arg_t) -10 }, + { False, XK_g, it_first, (arg_t) None }, + { False, XK_G, it_last, (arg_t) None }, + + { True, XK_n, i_navigate_frame, (arg_t) +1 }, + { True, XK_p, i_navigate_frame, (arg_t) -1 }, + { True, XK_space, i_toggle_animation, (arg_t) None }, + + { False, XK_h, it_move, (arg_t) DIR_LEFT }, + { False, XK_Left, it_move, (arg_t) DIR_LEFT }, + { False, XK_j, it_move, (arg_t) DIR_DOWN }, + { False, XK_Down, it_move, (arg_t) DIR_DOWN }, + { False, XK_k, it_move, (arg_t) DIR_UP }, + { False, XK_Up, it_move, (arg_t) DIR_UP }, + { False, XK_l, it_move, (arg_t) DIR_RIGHT }, + { False, XK_Right, it_move, (arg_t) DIR_RIGHT }, + + { True, XK_h, i_pan_screen, (arg_t) DIR_LEFT }, + { True, XK_Left, i_pan_screen, (arg_t) DIR_LEFT }, + { True, XK_j, i_pan_screen, (arg_t) DIR_DOWN }, + { True, XK_Down, i_pan_screen, (arg_t) DIR_DOWN }, + { True, XK_k, i_pan_screen, (arg_t) DIR_UP }, + { True, XK_Up, i_pan_screen, (arg_t) DIR_UP }, + { True, XK_l, i_pan_screen, (arg_t) DIR_RIGHT }, + { True, XK_Right, i_pan_screen, (arg_t) DIR_RIGHT }, + + { False, XK_H, i_pan_edge, (arg_t) DIR_LEFT }, + { False, XK_J, i_pan_edge, (arg_t) DIR_DOWN }, + { False, XK_K, i_pan_edge, (arg_t) DIR_UP }, + { False, XK_L, i_pan_edge, (arg_t) DIR_RIGHT }, + + { False, XK_plus, i_zoom, (arg_t) +1 }, + { False, XK_equal, i_zoom, (arg_t) +1 }, + { False, XK_KP_Add, i_zoom, (arg_t) +1 }, + { False, XK_minus, i_zoom, (arg_t) -1 }, + { False, XK_KP_Subtract, i_zoom, (arg_t) -1 }, + { False, XK_0, i_zoom, (arg_t) None }, + { False, XK_KP_0, i_zoom, (arg_t) None }, + { False, XK_w, i_fit_to_win, (arg_t) None }, + { False, XK_W, i_fit_to_img, (arg_t) None }, + + { False, XK_less, i_rotate, (arg_t) DIR_LEFT }, + { False, XK_greater, i_rotate, (arg_t) DIR_RIGHT }, + + { False, XK_a, i_toggle_antialias, (arg_t) None }, + { False, XK_A, it_toggle_alpha, (arg_t) None }, + + /* open current image with given program: */ + { True, XK_g, it_open_with, (arg_t) "gimp" }, + + /* run shell command line on current file ("$SXIV_IMG"): */ + { True, XK_less, it_shell_cmd, (arg_t) \ + "mogrify -rotate -90 \"$SXIV_IMG\"" }, + { True, XK_greater, it_shell_cmd, (arg_t) \ + "mogrify -rotate +90 \"$SXIV_IMG\"" }, + { True, XK_comma, it_shell_cmd, (arg_t) \ + "jpegtran -rotate 270 -copy all -outfile \"$SXIV_IMG\" \"$SXIV_IMG\"" }, + { True, XK_period, it_shell_cmd, (arg_t) \ + "jpegtran -rotate 90 -copy all -outfile \"$SXIV_IMG\" \"$SXIV_IMG\"" }, +}; + +/* mouse button mappings for image mode: */ +static const button_t buttons[] = { + /* ctrl shift button function argument */ + { False, False, Button1, i_navigate, (arg_t) +1 }, + { False, False, Button3, i_navigate, (arg_t) -1 }, + { False, False, Button2, i_drag, (arg_t) None }, + { False, False, Button4, it_move, (arg_t) DIR_UP }, + { False, False, Button5, it_move, (arg_t) DIR_DOWN }, + { False, True, Button4, it_move, (arg_t) DIR_LEFT }, + { False, True, Button5, it_move, (arg_t) DIR_RIGHT }, + { True, False, Button4, i_zoom, (arg_t) +1 }, + { True, False, Button5, i_zoom, (arg_t) -1 }, +}; + +#endif diff --git a/config.h b/config.h deleted file mode 100644 index d5a9463..0000000 --- a/config.h +++ /dev/null @@ -1,138 +0,0 @@ -#ifdef _WINDOW_CONFIG - -/* default window dimensions (overwritten via -g option): */ -enum { - WIN_WIDTH = 800, - WIN_HEIGHT = 600 -}; - -/* default color for window background: */ -static const char * const BG_COLOR = "#777777"; -/* default color for thumbnail selection: */ -static const char * const SEL_COLOR = "#DDDDDD"; -/* (see X(7) section "COLOR NAMES" for valid values) */ - -#endif -#ifdef _IMAGE_CONFIG - -/* how should images be scaled when they are loaded? - * (also controllable via -d/-s/-Z/-z options) - * SCALE_DOWN: 100%, but fit large images into window, - * SCALE_FIT: fit all images into window, - * SCALE_ZOOM: use current zoom level, 100% at startup - */ -static const scalemode_t SCALE_MODE = SCALE_DOWN; - -/* levels (percent) to use when zooming via '-' and '+': */ -static const float zoom_levels[] = { - 12.5, 25.0, 50.0, 75.0, - 100.0, 150.0, 200.0, 400.0, 800.0 -}; - -/* default settings for multi-frame gif images: */ -enum { - GIF_DELAY = 100, /* delay time (in ms) */ - GIF_AUTOPLAY = 1, /* autoplay when loaded [0/1] */ - GIF_LOOP = 0 /* endless loop [0/1] */ -}; - -#endif -#ifdef _THUMBS_CONFIG - -/* default dimension of thumbnails (width == height): */ -enum { THUMB_SIZE = 60 }; - -#endif -#ifdef _MAPPINGS_CONFIG - -/* keyboard mappings for image and thumbnail mode: */ -static const keymap_t keys[] = { - /* ctrl key function argument */ - { False, XK_q, it_quit, (arg_t) None }, - { False, XK_Return, it_switch_mode, (arg_t) None }, - { False, XK_f, it_toggle_fullscreen, (arg_t) None }, - - { False, XK_r, it_reload_image, (arg_t) None }, - { False, XK_D, it_remove_image, (arg_t) None }, - - { False, XK_n, i_navigate, (arg_t) +1 }, - { False, XK_space, i_navigate, (arg_t) +1 }, - { False, XK_p, i_navigate, (arg_t) -1 }, - { False, XK_BackSpace, i_navigate, (arg_t) -1 }, - { False, XK_bracketright, i_navigate, (arg_t) +10 }, - { False, XK_bracketleft, i_navigate, (arg_t) -10 }, - { False, XK_g, it_first, (arg_t) None }, - { False, XK_G, it_last, (arg_t) None }, - - { True, XK_n, i_navigate_frame, (arg_t) +1 }, - { True, XK_p, i_navigate_frame, (arg_t) -1 }, - { True, XK_space, i_toggle_animation, (arg_t) None }, - - { False, XK_h, it_move, (arg_t) DIR_LEFT }, - { False, XK_Left, it_move, (arg_t) DIR_LEFT }, - { False, XK_j, it_move, (arg_t) DIR_DOWN }, - { False, XK_Down, it_move, (arg_t) DIR_DOWN }, - { False, XK_k, it_move, (arg_t) DIR_UP }, - { False, XK_Up, it_move, (arg_t) DIR_UP }, - { False, XK_l, it_move, (arg_t) DIR_RIGHT }, - { False, XK_Right, it_move, (arg_t) DIR_RIGHT }, - - { True, XK_h, i_pan_screen, (arg_t) DIR_LEFT }, - { True, XK_Left, i_pan_screen, (arg_t) DIR_LEFT }, - { True, XK_j, i_pan_screen, (arg_t) DIR_DOWN }, - { True, XK_Down, i_pan_screen, (arg_t) DIR_DOWN }, - { True, XK_k, i_pan_screen, (arg_t) DIR_UP }, - { True, XK_Up, i_pan_screen, (arg_t) DIR_UP }, - { True, XK_l, i_pan_screen, (arg_t) DIR_RIGHT }, - { True, XK_Right, i_pan_screen, (arg_t) DIR_RIGHT }, - - { False, XK_H, i_pan_edge, (arg_t) DIR_LEFT }, - { False, XK_J, i_pan_edge, (arg_t) DIR_DOWN }, - { False, XK_K, i_pan_edge, (arg_t) DIR_UP }, - { False, XK_L, i_pan_edge, (arg_t) DIR_RIGHT }, - - { False, XK_plus, i_zoom, (arg_t) +1 }, - { False, XK_equal, i_zoom, (arg_t) +1 }, - { False, XK_KP_Add, i_zoom, (arg_t) +1 }, - { False, XK_minus, i_zoom, (arg_t) -1 }, - { False, XK_KP_Subtract, i_zoom, (arg_t) -1 }, - { False, XK_0, i_zoom, (arg_t) None }, - { False, XK_KP_0, i_zoom, (arg_t) None }, - { False, XK_w, i_fit_to_win, (arg_t) None }, - { False, XK_W, i_fit_to_img, (arg_t) None }, - - { False, XK_less, i_rotate, (arg_t) DIR_LEFT }, - { False, XK_greater, i_rotate, (arg_t) DIR_RIGHT }, - - { False, XK_a, i_toggle_antialias, (arg_t) None }, - { False, XK_A, it_toggle_alpha, (arg_t) None }, - - /* open current image with given program: */ - { True, XK_g, it_open_with, (arg_t) "gimp" }, - - /* run shell command line on current file ("$SXIV_IMG"): */ - { True, XK_less, it_shell_cmd, (arg_t) \ - "mogrify -rotate -90 \"$SXIV_IMG\"" }, - { True, XK_greater, it_shell_cmd, (arg_t) \ - "mogrify -rotate +90 \"$SXIV_IMG\"" }, - { True, XK_comma, it_shell_cmd, (arg_t) \ - "jpegtran -rotate 270 -copy all -outfile \"$SXIV_IMG\" \"$SXIV_IMG\"" }, - { True, XK_period, it_shell_cmd, (arg_t) \ - "jpegtran -rotate 90 -copy all -outfile \"$SXIV_IMG\" \"$SXIV_IMG\"" }, -}; - -/* mouse button mappings for image mode: */ -static const button_t buttons[] = { - /* ctrl shift button function argument */ - { False, False, Button1, i_navigate, (arg_t) +1 }, - { False, False, Button3, i_navigate, (arg_t) -1 }, - { False, False, Button2, i_drag, (arg_t) None }, - { False, False, Button4, it_move, (arg_t) DIR_UP }, - { False, False, Button5, it_move, (arg_t) DIR_DOWN }, - { False, True, Button4, it_move, (arg_t) DIR_LEFT }, - { False, True, Button5, it_move, (arg_t) DIR_RIGHT }, - { True, False, Button4, i_zoom, (arg_t) +1 }, - { True, False, Button5, i_zoom, (arg_t) -1 }, -}; - -#endif diff --git a/image.c b/image.c index e2fc096..e018631 100644 --- a/image.c +++ b/image.c @@ -18,7 +18,7 @@ #include -#ifdef HAVE_GIFLIB +#ifdef GIF_SUPPORT #include #include #include @@ -59,7 +59,7 @@ void img_init(img_t *img, win_t *win) { } } -#ifdef HAVE_GIFLIB +#ifdef GIF_SUPPORT /* Originally based on, but in its current form merely inspired by Imlib2's * src/modules/loaders/loader_gif.c:load(), written by Carsten Haitzler. */ @@ -223,7 +223,7 @@ int img_load_gif(img_t *img, const fileinfo_t *file) { return !err; } -#endif /* HAVE_GIFLIB */ +#endif /* GIF_SUPPORT */ int img_load(img_t *img, const fileinfo_t *file) { const char *fmt; @@ -241,7 +241,7 @@ int img_load(img_t *img, const fileinfo_t *file) { imlib_context_set_anti_alias(img->aa); fmt = imlib_image_format(); -#ifdef HAVE_GIFLIB +#ifdef GIF_SUPPORT if (!strcmp(fmt, "gif")) img_load_gif(img, file); #else -- cgit v1.2.3