aboutsummaryrefslogtreecommitdiff
path: root/autoconfig.cpp
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2014-11-28 17:49:37 +0000
committerMike Buland <eichlan@xagasoft.com>2014-11-28 17:49:37 +0000
commitd8ef3caf2d9be17c3fe54a51b65d321fcd768d30 (patch)
tree14effe91c178c9a4b8e90e972d28f3f32a5f41b6 /autoconfig.cpp
parent8bbf908ab1afd341e361dd5ad0c37f3c1b9a6635 (diff)
downloadlibbu++-d8ef3caf2d9be17c3fe54a51b65d321fcd768d30.tar.gz
libbu++-d8ef3caf2d9be17c3fe54a51b65d321fcd768d30.tar.bz2
libbu++-d8ef3caf2d9be17c3fe54a51b65d321fcd768d30.tar.xz
libbu++-d8ef3caf2d9be17c3fe54a51b65d321fcd768d30.zip
Heh, autoconfig didn't work on systems without /dev/null
(*caugh* windows *caugh*)
Diffstat (limited to 'autoconfig.cpp')
-rw-r--r--autoconfig.cpp34
1 files changed, 28 insertions, 6 deletions
diff --git a/autoconfig.cpp b/autoconfig.cpp
index 9d09412..0df3dbd 100644
--- a/autoconfig.cpp
+++ b/autoconfig.cpp
@@ -5,12 +5,18 @@
5#include <string.h> 5#include <string.h>
6 6
7FILE *fOut = NULL; 7FILE *fOut = NULL;
8bool bHasDevNull;
8 9
9bool testCpp( const char *prog ) 10bool testCpp( const char *prog )
10{ 11{
11 FILE *pop = popen("g++ -x c++ - -o /dev/null", "w"); 12 FILE *pop = popen(
13 bHasDevNull?"g++ -x c++ - -o /dev/null":"g++ -x c++ - -o trash.del",
14 "w");
12 fwrite( prog, 1, strlen( prog ), pop ); 15 fwrite( prog, 1, strlen( prog ), pop );
13 return pclose(pop) == 0; 16 bool bFound = (pclose(pop) == 0);
17 if( !bHasDevNull )
18 unlink("trash.del");
19 return bFound;
14} 20}
15 21
16bool testLib( const char *lib, const char *symname, const char *humname ) 22bool testLib( const char *lib, const char *symname, const char *humname )
@@ -21,25 +27,31 @@ bool testLib( const char *lib, const char *symname, const char *humname )
21 char *cmdline = (char *)malloc( 29+strlen(lib) ); 27 char *cmdline = (char *)malloc( 29+strlen(lib) );
22 strcpy( cmdline, "g++ -x c++ -l"); 28 strcpy( cmdline, "g++ -x c++ -l");
23 strcat( cmdline, lib ); 29 strcat( cmdline, lib );
24 strcat( cmdline, " - -o /dev/null"); 30 if( bHasDevNull )
31 strcat( cmdline, " - -o /dev/null");
32 else
33 strcat( cmdline, " - -o trash.del");
25 34
26 FILE *pop = popen( cmdline, "w"); 35 FILE *pop = popen( cmdline, "w");
27 fwrite( prog, 1, strlen( prog ), pop ); 36 fwrite( prog, 1, strlen( prog ), pop );
28 free( cmdline ); 37 free( cmdline );
29 if( pclose(pop) == 0 ) 38 bool bFound = (pclose(pop) == 0);
39 if( bFound )
30 { 40 {
31 printf("found.\n"); 41 printf("found.\n");
32 fprintf( fOut, "#define BU_FEATURE_%s 1\n", symname ); 42 fprintf( fOut, "#define BU_FEATURE_%s 1\n", symname );
33 fprintf( fOut, "#define BU_HAS_%s\n", symname ); 43 fprintf( fOut, "#define BU_HAS_%s\n", symname );
34 return false;
35 } 44 }
36 else 45 else
37 { 46 {
38 printf("missing.\n"); 47 printf("missing.\n");
39 fprintf( fOut, "#define BU_FEATURE_%s 0\n", symname ); 48 fprintf( fOut, "#define BU_FEATURE_%s 0\n", symname );
40 fprintf( fOut, "#define BU_MISSING_%s\n", symname ); 49 fprintf( fOut, "#define BU_MISSING_%s\n", symname );
41 return true;
42 } 50 }
51
52 if( !bHasDevNull )
53 unlink("trash.del");
54 return bFound;
43} 55}
44 56
45void detectEndianness() 57void detectEndianness()
@@ -67,6 +79,15 @@ void detectEndianness()
67 } 79 }
68} 80}
69 81
82bool fileExists( const char *filename )
83{
84 FILE *fTmp = fopen(filename, "rw");
85 if( fTmp == NULL )
86 return false;
87 fclose( fTmp );
88 return true;
89}
90
70int main( int argc, char *argv[] ) 91int main( int argc, char *argv[] )
71{ 92{
72 if( argc == 1 ) 93 if( argc == 1 )
@@ -79,6 +100,7 @@ int main( int argc, char *argv[] )
79 ); 100 );
80 return 127; 101 return 127;
81 } 102 }
103 bHasDevNull = fileExists("/dev/null");
82 if( strcmp( argv[1], "src/autoconfig.h" ) == 0 ) 104 if( strcmp( argv[1], "src/autoconfig.h" ) == 0 )
83 { 105 {
84 fOut = fopen( argv[1], "w" ); 106 fOut = fopen( argv[1], "w" );