diff options
-rw-r--r-- | tests/.gitignore | 16 | ||||
-rw-r--r-- | tests/bmp/bmp_im2im.c | 10 | ||||
-rw-r--r-- | tests/gd/gd_im2im.c | 10 | ||||
-rw-r--r-- | tests/gd2/gd2_im2im.c | 10 | ||||
-rw-r--r-- | tests/gdimagefile/.gitignore | 1 | ||||
-rw-r--r-- | tests/gdimagefile/gdnametest.c | 26 | ||||
-rw-r--r-- | tests/gdimagefill/bug00002_1.c | 13 | ||||
-rw-r--r-- | tests/gdimagestringft/gdimagestringft_bbox.c | 6 | ||||
-rw-r--r-- | tests/gdtest/gdtest.c | 114 | ||||
-rw-r--r-- | tests/gdtest/gdtest.h | 15 | ||||
-rw-r--r-- | tests/gif/bug00006.c | 17 | ||||
-rw-r--r-- | tests/gif/bug00181.c | 24 | ||||
-rw-r--r-- | tests/gif/bug00227.c | 6 | ||||
-rw-r--r-- | tests/gif/gif_im2im.c | 10 | ||||
-rw-r--r-- | tests/jpeg/jpeg_im2im.c | 10 | ||||
-rw-r--r-- | tests/png/png_im2im.c | 10 | ||||
-rw-r--r-- | tests/tiff/tiff_dpi.c | 10 | ||||
-rw-r--r-- | tests/tiff/tiff_im2im.c | 10 | ||||
-rw-r--r-- | tests/wbmp/wbmp_im2im.c | 10 | ||||
-rw-r--r-- | tests/webp/bug00111.c | 6 | ||||
-rwxr-xr-x | travis/main.sh | 40 |
21 files changed, 224 insertions, 150 deletions
diff --git a/tests/.gitignore b/tests/.gitignore index 7e1230c..9422fc4 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,20 +1,4 @@ *.log *.trs -# We don't keep any media files in the top dir ... just generated outputs. -/*.bmp -/*.gd -/*.gd2 -/*.gif -/*.jpeg -/*.jpg -/*.png -/*.tga -/*.tiff -/*.ttf -/*.wbmp -/*.webp -/*.xbm -/*.xpm - /test_config.h diff --git a/tests/bmp/bmp_im2im.c b/tests/bmp/bmp_im2im.c index 2beb2db..00e2123 100644 --- a/tests/bmp/bmp_im2im.c +++ b/tests/bmp/bmp_im2im.c @@ -23,13 +23,9 @@ int main() gdImageEllipse(src, 70, 25, 30, 20, b); #define OUTPUT_BMP(name) do { \ - FILE *fp; \ - \ - fp = fopen("bmp_im2im_" #name ".bmp", "wb"); \ - if (fp) { \ - gdImageBmp(name, fp, 1); \ - fclose(fp); \ - } \ + FILE *fp = gdTestTempFp(); \ + gdImageBmp(name, fp, 1); \ + fclose(fp); \ } while (0) OUTPUT_BMP(src); diff --git a/tests/gd/gd_im2im.c b/tests/gd/gd_im2im.c index a7a2226..990605d 100644 --- a/tests/gd/gd_im2im.c +++ b/tests/gd/gd_im2im.c @@ -23,13 +23,9 @@ int main() gdImageEllipse(src, 70, 25, 30, 20, b); #define OUTPUT_GD(x) do { \ - FILE *fp; \ - \ - fp = fopen("gd_im2im_" #x ".gd", "wb"); \ - if (fp) { \ - gdImageGd(x, fp); \ - fclose(fp); \ - } \ + FILE *fp = gdTestTempFp(); \ + gdImageGd(x, fp); \ + fclose(fp); \ } while (0) OUTPUT_GD(src); diff --git a/tests/gd2/gd2_im2im.c b/tests/gd2/gd2_im2im.c index 7745fa5..72e99da 100644 --- a/tests/gd2/gd2_im2im.c +++ b/tests/gd2/gd2_im2im.c @@ -23,13 +23,9 @@ int main() gdImageEllipse(src, 70, 25, 30, 20, b); #define OUTPUT_GD2(x) do { \ - FILE *fp; \ - \ - fp = fopen("gd2_im2im_" #x ".gd2", "wb"); \ - if (fp) { \ - gdImageGd2(x, fp, (GD2_CHUNKSIZE_MIN+GD2_CHUNKSIZE_MAX)/2, GD2_FMT_COMPRESSED); \ - fclose(fp); \ - } \ + FILE *fp = gdTestTempFp(); \ + gdImageGd2(x, fp, (GD2_CHUNKSIZE_MIN+GD2_CHUNKSIZE_MAX)/2, GD2_FMT_COMPRESSED); \ + fclose(fp); \ } while (0) OUTPUT_GD2(src); diff --git a/tests/gdimagefile/.gitignore b/tests/gdimagefile/.gitignore index b0f021b..9c76ed4 100644 --- a/tests/gdimagefile/.gitignore +++ b/tests/gdimagefile/.gitignore @@ -1,2 +1 @@ /gdnametest -/img.png diff --git a/tests/gdimagefile/gdnametest.c b/tests/gdimagefile/gdnametest.c index f2bb8a6..2be648e 100644 --- a/tests/gdimagefile/gdnametest.c +++ b/tests/gdimagefile/gdnametest.c @@ -84,7 +84,7 @@ do_test() { for (n = 0; names[n].nm; n++) { gdImagePtr orig, copy; int status; - char full_filename[255]; + char *full_filename; /* Some image readers are buggy and crash the program so we * skip them. Bug fixers should remove these from the list of @@ -104,24 +104,19 @@ do_test() { orig = mkcross(); - - #ifdef GDTEST_TOP_DIR - - snprintf(full_filename, sizeof(full_filename), GDTEST_TOP_DIR"/gdimagefile/%s", - names[n].nm); - - #else - /* Prepend the test directory; this is expected to be run in - * the parent dir. */ - snprintf(full_filename, sizeof(full_filename), "gdimagefile/%s", - names[n].nm); - #endif - - /* Write the image unless writing is not supported. */ if (!names[n].readonly) { + /* Prepend the test directory; this is expected to be run in + * the parent dir. */ + full_filename = gdTestTempFile(names[n].nm); status = gdImageFile(orig, full_filename); gdTestAssertMsg(status == GD_TRUE, "Failed to create %s\n", full_filename); + } else { + /* Prepend the test directory; this is expected to be run in + * the parent dir. */ + full_filename = malloc(strlen(GDTEST_TOP_DIR) + strlen("/gdimagefile/") + strlen(names[n].nm) + 1); + gdTestAssert(full_filename != NULL); + sprintf(full_filename, GDTEST_TOP_DIR"/gdimagefile/%s", names[n].nm); }/* if */ copy = gdImageCreateFromFile(full_filename); @@ -138,6 +133,7 @@ do_test() { gdTestAssertMsg(status == 0, "Failed to delete %s\n", full_filename); }/* if */ + free(full_filename); gdImageDestroy(orig); gdImageDestroy(copy); }/* for */ diff --git a/tests/gdimagefill/bug00002_1.c b/tests/gdimagefill/bug00002_1.c index 2a440f2..060a22a 100644 --- a/tests/gdimagefill/bug00002_1.c +++ b/tests/gdimagefill/bug00002_1.c @@ -2,12 +2,11 @@ #include <stdio.h> #include "gdtest.h" -#define TMP_FN "bug00002_1.png" - int main() { gdImagePtr im; FILE *fp; + char *file; char path[1024]; im = gdImageCreateTrueColor(100, 100); @@ -20,9 +19,10 @@ int main() gdImageFill(im, 0, 0, 0xffffff); gdImageFill(im, 0, 0, 0xffffff); - fp = fopen(TMP_FN, "wb"); + file = gdTestTempFile("bug00002_1.png"); + fp = fopen(file, "wb"); if (fp == NULL) { - gdTestErrorMsg("Cannot create image from <%s>\n", TMP_FN); + gdTestErrorMsg("Cannot create image from <%s>\n", file); gdImageDestroy(im); return 1; } @@ -38,11 +38,6 @@ int main() gdImageDestroy(im); - if (remove(TMP_FN) == -1) { - gdTestErrorMsg("Cannot remove temporary file: <%s>\n", TMP_FN); - return 1; - } - return 0; } diff --git a/tests/gdimagestringft/gdimagestringft_bbox.c b/tests/gdimagestringft/gdimagestringft_bbox.c index 01fd73a..47037cc 100644 --- a/tests/gdimagestringft/gdimagestringft_bbox.c +++ b/tests/gdimagestringft/gdimagestringft_bbox.c @@ -68,11 +68,7 @@ int main() y = (int)(cos_t * y - sin_t * x); x = temp; } - fp = fopen("gdimagestringft_bbox.png", "wb"); - if (!fp) { - error = 1; - goto done; - } + fp = gdTestTempFp(); gdImagePng(im, fp); fclose(fp); done: diff --git a/tests/gdtest/gdtest.c b/tests/gdtest/gdtest.c index 64ca42f..d31b002 100644 --- a/tests/gdtest/gdtest.c +++ b/tests/gdtest/gdtest.c @@ -1,3 +1,4 @@ +#include <config.h> #include <assert.h> #include <setjmp.h> #include <stdlib.h> @@ -5,6 +6,20 @@ #include <string.h> #include <math.h> #include <limits.h> + +#ifdef HAVE_DIRENT_H +#include <dirent.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif + #include "gd.h" #include "gdtest.h" @@ -38,6 +53,105 @@ gdImagePtr gdTestImageFromPng(const char *filename) return image; } +static char *tmpdir_base; + +/* This is kind of hacky, but it's meant to be simple. */ +static void _clean_dir(const char *dir) +{ + DIR *d; + struct dirent *de; + + d = opendir(dir); + if (d == NULL) + return; + + if (chdir(dir) != 0) + goto done; + + while ((de = readdir(d)) != NULL) { + struct stat st; + + if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) + continue; + + if (lstat(de->d_name, &st) != 0) + continue; + + if (S_ISDIR(st.st_mode)) + _clean_dir(de->d_name); + else + unlink(de->d_name); + } + + if (chdir("..")) { + /* Ignore. */; + } + + done: + closedir(d); + rmdir(dir); +} + +static void tmpdir_cleanup(void) +{ + _clean_dir(tmpdir_base); + free(tmpdir_base); +} + +const char *gdTestTempDir(void) +{ + if (tmpdir_base == NULL) { + char *tmpdir, *tmpdir_root; + + tmpdir_root = getenv("TMPDIR"); + if (tmpdir_root == NULL) + tmpdir_root = "/tmp"; + + /* The constant here is a lazy over-estimate. */ + tmpdir = malloc(strlen(tmpdir_root) + 30); + gdTestAssert(tmpdir != NULL); + + sprintf(tmpdir, "%s/gdtest.XXXXXX", tmpdir_root); + + tmpdir_base = mkdtemp(tmpdir); + gdTestAssert(tmpdir_base != NULL); + + atexit(tmpdir_cleanup); + } + + return tmpdir_base; +} + +char *gdTestTempFile(const char *template) +{ + const char *tempdir = gdTestTempDir(); + char *ret; + + if (template == NULL) + template = "gdtemp.XXXXXX"; + + ret = malloc(strlen(tempdir) + 10 + strlen(template)); + gdTestAssert(ret != NULL); + sprintf(ret, "%s/%s", tempdir, template); + + if (strstr(template, "XXXXXX") != NULL) { + int fd = mkstemp(ret); + gdTestAssert(fd != -1); + close(fd); + } + + return ret; +} + +FILE *gdTestTempFp(void) +{ + char *file = gdTestTempFile(NULL); + FILE *fp = fopen(file, "wb"); + gdTestAssert(fp != NULL); + free(file); + return fp; +} + /* Compare two buffers, returning the number of pixels that are * different and the maximum difference of any single color channel in * result_ret. diff --git a/tests/gdtest/gdtest.h b/tests/gdtest/gdtest.h index 8f332b3..0d40d98 100644 --- a/tests/gdtest/gdtest.h +++ b/tests/gdtest/gdtest.h @@ -15,6 +15,21 @@ struct CuTestImageResult { /* Internal versions of assert functions -- use the public versions */ gdImagePtr gdTestImageFromPng(const char *filename); +/* Return a path to a writable temp dir. The common test code will make sure + * it's cleaned up when the test exits. Feel free to write whatever in here. + */ +const char *gdTestTempDir(void); + +/* Return a path to a writable file inside of the tempdir (see above). + * You should free the pointer when you're done. + * If |template| is NULL, you'll get a random file name, otherwise you'll get + * that under the tempdir. + */ +char *gdTestTempFile(const char *template); + +/* Return an open file handle to a temp file. */ +FILE *gdTestTempFp(void); + void gdTestImageDiff(gdImagePtr buf_a, gdImagePtr buf_b, gdImagePtr buf_diff, CuTestImageResult *result_ret); diff --git a/tests/gif/bug00006.c b/tests/gif/bug00006.c index 57d7ad0..f1a7fe8 100644 --- a/tests/gif/bug00006.c +++ b/tests/gif/bug00006.c @@ -2,12 +2,11 @@ #include "gd.h" #include "gdtest.h" -#define TMP_FN "_tmp_bug0006.gif" - int main() { gdImagePtr im; FILE *fp; + char *file; const int r = 255, g = 0, b = 0; int r_f,g_f,b_f, trans_c_f; int trans_c = gdTrueColorAlpha(r,g,b,0); @@ -22,9 +21,10 @@ int main() gdImageColorTransparent(im, trans_c); gdImageFilledRectangle(im, 0,0, 192,36, trans_c); - fp = fopen(TMP_FN, "wb"); + file = gdTestTempFile("bug0006.gif"); + fp = fopen(file, "wb"); if (!fp) { - gdTestErrorMsg("Cannot open <%s> for writing\n", TMP_FN); + gdTestErrorMsg("Cannot open <%s> for writing\n", file); return 1; } gdImageGif(im,fp); @@ -32,16 +32,16 @@ int main() gdImageDestroy(im); - fp = fopen(TMP_FN, "rb"); + fp = fopen(file, "rb"); if (!fp) { - gdTestErrorMsg("Cannot open <%s> for reading\n", TMP_FN); + gdTestErrorMsg("Cannot open <%s> for reading\n", file); return 1; } im = gdImageCreateFromGif(fp); fclose(fp); if (!im) { - gdTestErrorMsg("Cannot create image from <%s>\n", TMP_FN); + gdTestErrorMsg("Cannot create image from <%s>\n", file); return 1; } @@ -60,8 +60,5 @@ int main() /* Destroy it */ gdImageDestroy(im); - if (remove(TMP_FN) == -1) { - gdTestErrorMsg("Cannot remove file: <%s>\n", TMP_FN); - } return error; } diff --git a/tests/gif/bug00181.c b/tests/gif/bug00181.c index 27d6481..43b9e3b 100644 --- a/tests/gif/bug00181.c +++ b/tests/gif/bug00181.c @@ -5,6 +5,7 @@ int main() { gdImagePtr im, im2, im3; + char *file; FILE *fp; int black, trans; int error = 0; @@ -16,28 +17,30 @@ int main() return 1; } im->interlace = 1; - fp = fopen("bug00181.gif", "wb"); + file = gdTestTempFile("bug00181.gif"); + fp = fopen(file, "wb"); if (!fp) { - gdTestErrorMsg("Cannot open <%s> for writing.\n", "bug00181.gif"); + gdTestErrorMsg("Cannot open <%s> for writing.\n", file); return 1; } gdImageGif(im, fp); gdImageDestroy(im); fclose(fp); - fp = fopen("bug00181.gif", "rb"); + fp = fopen(file, "rb"); if (!fp) { - gdTestErrorMsg("Cannot open <%s> for reading.\n", "bug00181.gif"); + gdTestErrorMsg("Cannot open <%s> for reading.\n", file); return 1; } im = gdImageCreateFromGif(fp); fclose(fp); if (!im) { - gdTestErrorMsg("Cannot create image from <%s>\n", "bug00181.gif"); + gdTestErrorMsg("Cannot create image from <%s>\n", file); return 1; } error = !im->interlace; gdImageDestroy(im); + free(file); if (error) return error; @@ -48,9 +51,10 @@ int main() black = gdImageColorAllocate(im, 0, 0, 0); trans = gdImageColorAllocate(im, 1, 1, 1); gdImageRectangle(im, 0, 0, 10, 10, black); - fp = fopen("bug00181a.gif", "wb"); + file = gdTestTempFile("bug00181a.gif"); + fp = fopen(file, "wb"); if (!fp) { - gdTestErrorMsg("Cannot open <%s> for writing.\n", "bug00181a.gif"); + gdTestErrorMsg("Cannot open <%s> for writing.\n", file); return 1; } gdImageGifAnimBegin(im, fp, 1, 3); @@ -75,15 +79,15 @@ int main() gdImageDestroy(im2); gdImageDestroy(im3); - fp = fopen("bug00181a.gif", "rb"); + fp = fopen(file, "rb"); if (!fp) { - gdTestErrorMsg("Cannot open <%s> for reading.\n", "bug00181a.gif"); + gdTestErrorMsg("Cannot open <%s> for reading.\n", file); return 1; } im = gdImageCreateFromGif(fp); fclose(fp); if (!im) { - gdTestErrorMsg("Cannot create image from <%s>\n", "bug00181a.gif"); + gdTestErrorMsg("Cannot create image from <%s>\n", file); return 1; } error = !im->interlace; diff --git a/tests/gif/bug00227.c b/tests/gif/bug00227.c index 861006e..e25bd9a 100644 --- a/tests/gif/bug00227.c +++ b/tests/gif/bug00227.c @@ -11,6 +11,7 @@ int main() { FILE *fp; + char *file; gdImagePtr im0, im1, im2; int i; char *buf; @@ -23,7 +24,8 @@ int main() gdImageSetPixel(im0, i, 0, c); } - fp = fopen("bug00227.gif", "wb"); + file = gdTestTempFile("bug00227.gif"); + fp = fopen(file, "wb"); if (!fp) return 1; gdImageGifAnimBegin(im0, fp, 0, 0); @@ -55,7 +57,7 @@ int main() gdImageDestroy(im2); /* check the Global Color Table flag */ - fp = fopen("bug00227.gif", "rb"); + fp = fopen(file, "rb"); if (!fp) return 1; buf = malloc(PROBE_SIZE); if (!buf) return 1; diff --git a/tests/gif/gif_im2im.c b/tests/gif/gif_im2im.c index a5b0adb..b66dddf 100644 --- a/tests/gif/gif_im2im.c +++ b/tests/gif/gif_im2im.c @@ -23,13 +23,9 @@ int main() gdImageEllipse(src, 70, 25, 30, 20, b); #define OUTPUT_GIF(name) do { \ - FILE *fp; \ - \ - fp = fopen("gif_im2im_" #name ".gif", "wb"); \ - if (fp) { \ - gdImageGif(name, fp); \ - fclose(fp); \ - } \ + FILE *fp = gdTestTempFp(); \ + gdImageGif(name, fp); \ + fclose(fp); \ } while (0) OUTPUT_GIF(src); diff --git a/tests/jpeg/jpeg_im2im.c b/tests/jpeg/jpeg_im2im.c index 89a72be..b361f4d 100644 --- a/tests/jpeg/jpeg_im2im.c +++ b/tests/jpeg/jpeg_im2im.c @@ -25,13 +25,9 @@ int main() gdImageEllipse(src, 70, 25, 30, 20, b); #define OUTPUT_JPEG(name) do { \ - FILE *fp; \ - \ - fp = fopen("jpeg_im2im_" #name ".jpeg", "wb"); \ - if (fp) { \ - gdImageJpeg(name, fp, 100); \ - fclose(fp); \ - } \ + FILE *fp = gdTestTempFp(); \ + gdImageJpeg(name, fp, 100); \ + fclose(fp); \ } while (0) OUTPUT_JPEG(src); diff --git a/tests/png/png_im2im.c b/tests/png/png_im2im.c index bac5e13..df6037d 100644 --- a/tests/png/png_im2im.c +++ b/tests/png/png_im2im.c @@ -23,13 +23,9 @@ int main() gdImageEllipse(src, 70, 25, 30, 20, b); #define OUTPUT_PNG(name) do { \ - FILE *fp; \ - \ - fp = fopen("png_im2im_" #name ".png", "wb"); \ - if (fp) { \ - gdImagePng(name, fp); \ - fclose(fp); \ - } \ + FILE *fp = gdTestTempFp(); \ + gdImagePng(name, fp); \ + fclose(fp); \ } while (0) OUTPUT_PNG(src); diff --git a/tests/tiff/tiff_dpi.c b/tests/tiff/tiff_dpi.c index 3d4a21a..cdffe6d 100644 --- a/tests/tiff/tiff_dpi.c +++ b/tests/tiff/tiff_dpi.c @@ -31,13 +31,9 @@ int main() src->res_y = res_y; #define OUTPUT_TIFF(name) do { \ - FILE *fp; \ - \ - fp = fopen("tiff_dpi_" #name ".tiff", "wb"); \ - if (fp) { \ - gdImageTiff(name, fp); \ - fclose(fp); \ - } \ + FILE *fp = gdTestTempFp(); \ + gdImageTiff(name, fp); \ + fclose(fp); \ } while (0) OUTPUT_TIFF(src); diff --git a/tests/tiff/tiff_im2im.c b/tests/tiff/tiff_im2im.c index 4b6136d..2fc113d 100644 --- a/tests/tiff/tiff_im2im.c +++ b/tests/tiff/tiff_im2im.c @@ -25,13 +25,9 @@ int main() gdImageEllipse(src, 70, 25, 30, 20, b); #define OUTPUT_TIFF(name) do { \ - FILE *fp; \ - \ - fp = fopen("tiff_im2im_" #name ".tiff", "wb"); \ - if (fp) { \ - gdImageTiff(name, fp); \ - fclose(fp); \ - } \ + FILE *fp = gdTestTempFp(); \ + gdImageTiff(name, fp); \ + fclose(fp); \ } while (0) OUTPUT_TIFF(src); diff --git a/tests/wbmp/wbmp_im2im.c b/tests/wbmp/wbmp_im2im.c index 826c7fa..597f602 100644 --- a/tests/wbmp/wbmp_im2im.c +++ b/tests/wbmp/wbmp_im2im.c @@ -21,13 +21,9 @@ int main() gdImageEllipse(src, 70, 25, 30, 20, b); #define OUTPUT_WBMP(name) do { \ - FILE *fp; \ - \ - fp = fopen("wbmp_im2im_" #name ".wbmp", "wb"); \ - if (fp) { \ - gdImageWBMP(name, 1, fp); \ - fclose(fp); \ - } \ + FILE *fp = gdTestTempFp(); \ + gdImageWBMP(name, 1, fp); \ + fclose(fp); \ } while (0) OUTPUT_WBMP(src); diff --git a/tests/webp/bug00111.c b/tests/webp/bug00111.c index 0dc2c8d..42aa428 100644 --- a/tests/webp/bug00111.c +++ b/tests/webp/bug00111.c @@ -8,7 +8,6 @@ int main() { gdImagePtr im; - char path[2048]; FILE *fp; im = gdImageCreateTrueColor(20, 20); @@ -16,13 +15,10 @@ int main() return 0; } - sprintf(path, "%s/webp/tmpbug00111.webp", GDTEST_TOP_DIR); - - fp = fopen(path, "wb"); + fp = gdTestTempFp(); gdImageWebp(im, fp); fclose(fp); - unlink(path); gdImageDestroy(im); return 0; } diff --git a/travis/main.sh b/travis/main.sh index 769d901..6e6b6d2 100755 --- a/travis/main.sh +++ b/travis/main.sh @@ -26,7 +26,7 @@ build_autotools() { m check VERBOSE=1 # TODO: Re-enable this once out-of-tree tests work. - #m distcheck + m distcheck VERBOSE=1 m install DESTDIR=$PWD/install-autotools # Clean things up for cmake. @@ -34,19 +34,31 @@ build_autotools() { } build_cmake() { - v cmake \ - -DBUILD_TEST=1 \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DCMAKE_INSTALL_LIBDIR=/usr/local/lib \ - -DENABLE_FONTCONFIG=1 \ - -DENABLE_FREETYPE=1 \ - -DENABLE_JPEG=1 \ - -DENABLE_PNG=1 \ - -DENABLE_TIFF=1 \ - -DENABLE_WEBP=1 \ - -DENABLE_XPM=1 \ - -DENABLE_ZLIB=1 \ - . + local args=( + -DBUILD_TEST=1 + -DCMAKE_INSTALL_PREFIX=/usr/local + -DCMAKE_INSTALL_LIBDIR=/usr/local/lib + -DENABLE_FONTCONFIG=1 + -DENABLE_FREETYPE=1 + -DENABLE_JPEG=1 + -DENABLE_PNG=1 + -DENABLE_TIFF=1 + -DENABLE_WEBP=1 + -DENABLE_XPM=1 + -DENABLE_ZLIB=1 + ) + + # First try building out of tree. + mkdir build + cd build + v cmake "${args[@]}" .. + m + v ctest -j${ncpus} + cd .. + rm -rf build + + # Then build in-tree. + v cmake "${args[@]}" . m v ctest -j${ncpus} m install DESTDIR=$PWD/install-cmake |