diff options
author | Mike Buland <eichlan@xagasoft.com> | 2014-11-28 17:38:56 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2014-11-28 17:38:56 +0000 |
commit | 8bbf908ab1afd341e361dd5ad0c37f3c1b9a6635 (patch) | |
tree | 6dadb4930707e541a4ed86ac5ddb4d8af9f48dfc /autoconfig.cpp | |
parent | 2698c84576447535f397fafcb9f5f06290c3596a (diff) | |
download | libbu++-8bbf908ab1afd341e361dd5ad0c37f3c1b9a6635.tar.gz libbu++-8bbf908ab1afd341e361dd5ad0c37f3c1b9a6635.tar.bz2 libbu++-8bbf908ab1afd341e361dd5ad0c37f3c1b9a6635.tar.xz libbu++-8bbf908ab1afd341e361dd5ad0c37f3c1b9a6635.zip |
Autoconfig now detects libraries that libbu++ can use and generates the
appropriate headers. bin2cpp now uses those headers to compile correctly
despite having missing filters.
Diffstat (limited to 'autoconfig.cpp')
-rw-r--r-- | autoconfig.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/autoconfig.cpp b/autoconfig.cpp index 28362ec..9d09412 100644 --- a/autoconfig.cpp +++ b/autoconfig.cpp | |||
@@ -13,6 +13,35 @@ bool testCpp( const char *prog ) | |||
13 | return pclose(pop) == 0; | 13 | return pclose(pop) == 0; |
14 | } | 14 | } |
15 | 15 | ||
16 | bool testLib( const char *lib, const char *symname, const char *humname ) | ||
17 | { | ||
18 | printf("Detecting library %s (-l%s)...", humname, lib ); | ||
19 | fflush( stdout ); | ||
20 | static const char *prog = "int main () { return 0; }"; | ||
21 | char *cmdline = (char *)malloc( 29+strlen(lib) ); | ||
22 | strcpy( cmdline, "g++ -x c++ -l"); | ||
23 | strcat( cmdline, lib ); | ||
24 | strcat( cmdline, " - -o /dev/null"); | ||
25 | |||
26 | FILE *pop = popen( cmdline, "w"); | ||
27 | fwrite( prog, 1, strlen( prog ), pop ); | ||
28 | free( cmdline ); | ||
29 | if( pclose(pop) == 0 ) | ||
30 | { | ||
31 | printf("found.\n"); | ||
32 | fprintf( fOut, "#define BU_FEATURE_%s 1\n", symname ); | ||
33 | fprintf( fOut, "#define BU_HAS_%s\n", symname ); | ||
34 | return false; | ||
35 | } | ||
36 | else | ||
37 | { | ||
38 | printf("missing.\n"); | ||
39 | fprintf( fOut, "#define BU_FEATURE_%s 0\n", symname ); | ||
40 | fprintf( fOut, "#define BU_MISSING_%s\n", symname ); | ||
41 | return true; | ||
42 | } | ||
43 | } | ||
44 | |||
16 | void detectEndianness() | 45 | void detectEndianness() |
17 | { | 46 | { |
18 | printf("Detecting endian support..."); | 47 | printf("Detecting endian support..."); |
@@ -59,6 +88,9 @@ int main( int argc, char *argv[] ) | |||
59 | ); | 88 | ); |
60 | 89 | ||
61 | detectEndianness(); | 90 | detectEndianness(); |
91 | testLib("z", "DEFLATE", "Deflate"); | ||
92 | testLib("bz2", "BZIP2", "BZip2"); | ||
93 | testLib("lzma", "LZMA", "Lzma"); | ||
62 | 94 | ||
63 | fprintf( fOut, "#endif\n"); | 95 | fprintf( fOut, "#endif\n"); |
64 | } | 96 | } |