URI: 
       tImprove makefile, but possibly just make it ugly - ltk - Socket-based GUI for X11 (WIP)
  HTML git clone git://lumidify.org/ltk.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/git/ltk.git (encrypted, but very slow)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit b0c76c485b6b050d6b76fdf6397d7d4b93ce1efc
   DIR parent 16fa6bfa5bfc26126ac712ac03528914b0d651f9
  HTML Author: lumidify <nobody@lumidify.org>
       Date:   Sat, 20 Feb 2021 21:15:18 +0100
       
       Improve makefile, but possibly just make it ugly
       
       Diffstat:
         M Makefile                            |      31 +++++++++++++++++++++++++++++--
         M color.c                             |       2 +-
         M color.h                             |       6 ++++--
         D config.mk                           |      14 --------------
         M ltk.h                               |       2 +-
         M ltkd.c                              |      10 +++++-----
         M memory.h                            |       2 +-
         M text.h                              |       2 +-
         M util.h                              |       5 +++++
       
       9 files changed, 47 insertions(+), 27 deletions(-)
       ---
   DIR diff --git a/Makefile b/Makefile
       t@@ -1,6 +1,33 @@
       -include config.mk
       +VERSION = -999
        
       -OBJ += strtonum.o util.o memory.o color.o ltkd.o ini.o grid.o box.o scrollbar.o button.o label.o draw.o
       +# FIXME: Using DEBUG here doesn't work because it somehow interferes with a predefined macro,
       +# at least on OpenBSD
       +DEV = 0
       +USE_PANGO = 0
       +
       +CFLAGS += -DUSE_PANGO=$(USE_PANGO) -DDEV=$(DEV) -D_POSIX_C_SOURCE=200809L -w -std=c99 `pkg-config --cflags x11 fontconfig`
       +LDFLAGS += -lm `pkg-config --libs x11 fontconfig`
       +
       +# Note: this macro magic for debugging and pango rendering seems ugly; it should probably be changed
       +
       +# debug
       +DEV_1 = -g -Wall -Werror -Wextra -pedantic
       +
       +# stb rendering
       +EXTRA_OBJ_0 = stb_truetype.o text_stb.o
       +
       +# pango rendering
       +EXTRA_OBJ_1 = text_pango.o
       +EXTRA_CFLAGS_1 += -DUSE_PANGO `pkg-config --cflags pangoxft`
       +EXTRA_LDFLAGS_1 += `pkg-config --libs pangoxft`
       +
       +EXTRA_OBJ = $(EXTRA_OBJ_$(USE_PANGO))
       +EXTRA_CFLAGS = $(EXTRA_CFLAGS_$(USE_PANGO)) $(DEV_$(DEV))
       +EXTRA_LDFLAGS = $(EXTRA_LDFLAGS_$(USE_PANGO))
       +
       +OBJ = strtonum.o util.o memory.o color.o ltkd.o ini.o grid.o box.o scrollbar.o button.o label.o draw.o $(EXTRA_OBJ)
       +CFLAGS += $(EXTRA_CFLAGS)
       +LDFLAGS += $(EXTRA_LDFLAGS)
        
        all: ltkd ltkc
        
   DIR diff --git a/color.c b/color.c
       t@@ -13,7 +13,7 @@ ltk_color_create(Display *dpy, int screen, Colormap cm, const char *hex, LtkColo
                }
                XAllocColor(dpy, cm, &col->xcolor);
                /* FIXME: replace with XftColorAllocValue; error checking */
       -        #ifdef USE_PANGO
       +        #if USE_PANGO == 1
                XftColorAllocName(dpy, DefaultVisual(dpy, screen), cm, hex, &col->xftcolor);
                #endif
        }
   DIR diff --git a/color.h b/color.h
       t@@ -1,15 +1,17 @@
        #ifndef _LTK_COLOR_H_
        #define _LTK_COLOR_H_
        
       -#ifdef USE_PANGO
       +#if USE_PANGO == 1
          #include <X11/Xft/Xft.h>
        #endif
        
        typedef struct {
                XColor xcolor;
       -        #ifdef USE_PANGO
       +        #if USE_PANGO == 1
                XftColor xftcolor;
                #endif
        } LtkColor;
        
       +void ltk_color_create(Display *dpy, int screen, Colormap cm, const char *hex, LtkColor *col);
       +
        #endif /* _LTK_COLOR_H_ */
   DIR diff --git a/config.mk b/config.mk
       t@@ -1,14 +0,0 @@
       -VERSION = -999
       -
       -CFLAGS = -DDEBUG -D_POSIX_C_SOURCE=200809L -g -std=c99 -w -fno-common -Wall -Werror -Wextra `pkg-config --cflags x11 fontconfig` -pedantic
       -LDFLAGS = -lm `pkg-config --libs x11 fontconfig`
       -
       -# Comment when enabling pango rendering:
       -OBJ = stb_truetype.o text_stb.o
       -
       -# Uncomment to enable pango rendering:
       -#OBJ = text_pango.o
       -#CFLAGS += -DUSE_PANGO `pkg-config --cflags pangoxft`
       -#LDFLAGS += `pkg-config --libs pangoxft`
       -
       -CC = cc
   DIR diff --git a/ltk.h b/ltk.h
       t@@ -160,7 +160,7 @@ int ltk_collide_rect(ltk_rect rect, int x, int y);
        void ltk_window_set_active_widget(ltk_window *window, ltk_widget *widget);
        void ltk_window_set_pressed_widget(ltk_window *window, ltk_widget *widget);
        void ltk_fill_widget_defaults(ltk_widget *widget, const char *id, ltk_window * window,
       -    void (*draw) (void *), void (*change_state) (void *),
       +    void (*draw) (void *, ltk_rect), void (*change_state) (void *),
            void (*destroy) (void *, int), unsigned int needs_redraw,
            ltk_widget_type type);
        void ltk_widget_mouse_press_event(ltk_widget *widget, XEvent event);
   DIR diff --git a/ltkd.c b/ltkd.c
       t@@ -188,7 +188,7 @@ ltk_mainloop(ltk_window *window) {
                FD_SET(listenfd, &rallfds);
                maxfd = listenfd;
        
       -        printf("%d", window->xwindow);
       +        printf("%lu", window->xwindow);
                /*fflush(stdout);*/
                daemonize();
        
       t@@ -327,7 +327,7 @@ get_sock_path(char *basedir, Window id) {
                /* FIXME: MAKE SURE THIS IS ACTUALLY BIG ENOUGH! */
                path = ltk_malloc(len + 20);
                /* FIXME: also check for less than 0 */
       -        if (snprintf(path, len + 20, "%s/%d.sock", basedir, id) >= len + 20)
       +        if (snprintf(path, len + 20, "%s/%lu.sock", basedir, id) >= len + 20)
                        ltk_fatal("Tell lumidify to fix his code.\n");
        
                return path;
       t@@ -395,10 +395,10 @@ ltk_log_msg(const char *mode, const char *format, va_list args) {
        
                time(&clock);
                timeptr = localtime(&clock);
       -        strftime(&logtime, 25, "%Y-%m-%d %H:%M:%S", timeptr);
       +        strftime(logtime, 25, "%Y-%m-%d %H:%M:%S", timeptr);
        
                if (main_window)
       -                fprintf(stderr, "%s ltkd(%d) %s: ", logtime, main_window->xwindow, mode);
       +                fprintf(stderr, "%s ltkd(%lu) %s: ", logtime, main_window->xwindow, mode);
                else
                        fprintf(stderr, "%s ltkd(?) %s: ", logtime, mode);
                vfprintf(stderr, format, args);
       t@@ -685,7 +685,7 @@ ltk_collide_rect(ltk_rect rect, int x, int y) {
        
        void
        ltk_fill_widget_defaults(ltk_widget *widget, const char *id, ltk_window *window,
       -    void (*draw) (void *), void (*change_state) (void *),
       +    void (*draw) (void *, ltk_rect), void (*change_state) (void *),
            void (*destroy) (void *, int), unsigned int needs_redraw,
            ltk_widget_type type) {
                if (id) {
   DIR diff --git a/memory.h b/memory.h
       t@@ -28,7 +28,7 @@
        
        /* Requires: <stdlib.h> */
        
       -#ifdef DEBUG
       +#if DEV == 1
          #define ltk_strdup(s) ltk_strdup_debug(s, __func__, __FILE__, __LINE__)
          #define ltk_malloc(size) ltk_malloc_debug(size, __func__, __FILE__, __LINE__)
          #define ltk_calloc(nmemb, size) ltk_calloc_debug(nmemb, size, __func__, __FILE__, __LINE__)
   DIR diff --git a/text.h b/text.h
       t@@ -14,7 +14,7 @@ void ltk_text_line_set_width(LtkTextLine *tl, int width);
        void ltk_text_line_get_size(LtkTextLine *tl, int *w, int *h);
        void ltk_text_line_destroy(LtkTextLine *tl);
        
       -#ifdef USE_PANGO
       +#if USE_PANGO == 1
          #include <pango/pangoxft.h>
        #endif
        
   DIR diff --git a/util.h b/util.h
       t@@ -38,3 +38,8 @@ char *ltk_strcat_useful(const char *str1, const char *str2);
           declared here so they can be used by the utility functions */
        void ltk_log_msg(const char *mode, const char *format, va_list args);
        void ltk_cleanup(void);
       +
       +void ltk_fatal_errno(const char *format, ...);
       +void ltk_warn_errno(const char *format, ...);
       +void ltk_fatal(const char *format, ...);
       +void ltk_warn(const char *format, ...);