Added comments explaing how to use cygwin/mingw/wine headers.
Added 'clean' and 'distclean' Added new options -s and -i. Archives will now include the entire './include' directory instead of just './include/wine'. Renamed makefile from Makefile.cyg to Makefile.win. The makefile is now mingw compatible as well (although it's be better if we could detect the correct location of the windows.h headers).
This commit is contained in:
parent
43230a2f42
commit
b1f478fada
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
#
|
#
|
||||||
# Script to generate a Cygwin makefile for running unit tests.
|
# Script to generate a Cygwin/Mingw makefile for running unit tests.
|
||||||
#
|
#
|
||||||
# Copyright 2002 Geoffrey Hausheer
|
# Copyright 2002 Geoffrey Hausheer
|
||||||
#
|
#
|
||||||
|
@ -27,7 +27,14 @@ sub get_testname;
|
||||||
sub create_archive($$\@);
|
sub create_archive($$\@);
|
||||||
|
|
||||||
# set this variable to point to your windows headers
|
# set this variable to point to your windows headers
|
||||||
my ($windows_includes) ="/usr/include/w32api";
|
my ($cygwin_windows_includes) ="/usr/include/w32api";
|
||||||
|
my ($mingw_windows_includes) ="/mingw/include";
|
||||||
|
my ($wine_windows_includes) ="./include";
|
||||||
|
my ($windows_includes)="";
|
||||||
|
|
||||||
|
#set the default headers to use
|
||||||
|
my ($default_headers) =\$cygwin_windows_includes;
|
||||||
|
|
||||||
# set this variable to your compiler options
|
# set this variable to your compiler options
|
||||||
my($cc_opts)= "-g -O2 -Wall -mpreferred-stack-boundary=2 -D_REENTRANT";
|
my($cc_opts)= "-g -O2 -Wall -mpreferred-stack-boundary=2 -D_REENTRANT";
|
||||||
|
|
||||||
|
@ -58,6 +65,22 @@ while ($#ARGV >= 0)
|
||||||
$afile = shift @ARGV;
|
$afile = shift @ARGV;
|
||||||
$archive = "g";
|
$archive = "g";
|
||||||
}
|
}
|
||||||
|
if ($arg eq "-i") {
|
||||||
|
$windows_includes = shift @ARGV;
|
||||||
|
$default_headers = \$windows_includes;
|
||||||
|
}
|
||||||
|
if ($arg eq "-s") {
|
||||||
|
my($sys) = shift @ARGV;
|
||||||
|
if ($sys eq "cygwin") {
|
||||||
|
$default_headers = \$cygwin_windows_includes;
|
||||||
|
} elsif ($sys eq "mingw") {
|
||||||
|
$default_headers = \$mingw_windows_includes;
|
||||||
|
} elsif ($sys eq "wine") {
|
||||||
|
$default_headers = \$wine_windows_includes;
|
||||||
|
} else {
|
||||||
|
usage;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# check/detect topobjdir
|
# check/detect topobjdir
|
||||||
|
@ -92,13 +115,30 @@ while(<FIND_FH>) {
|
||||||
close FIND_FH;
|
close FIND_FH;
|
||||||
|
|
||||||
#start writing the makefile in the root directory
|
#start writing the makefile in the root directory
|
||||||
open MAKE_FH,">Makefile.cyg";
|
open MAKE_FH,">Makefile.win";
|
||||||
print MAKE_FH "CC = gcc\n";
|
print MAKE_FH <<EOH ;
|
||||||
print MAKE_FH "WINDOWS_HEADERS = $windows_includes\n";
|
#Define WINDOWS_HEADERS to point at the directory where windows.h lives
|
||||||
print MAKE_FH "INCLUDE_DIRS = -I\$(WINDOWS_HEADERS) -I./include\n";
|
#Here are some examples
|
||||||
print MAKE_FH "CC_OPTS = \$(INCLUDE_DIRS) $cc_opts -include \$(WINDOWS_HEADERS)/windows.h\n";
|
# For Cygwin
|
||||||
|
#WINDOWS_HEADERS = $cygwin_windows_includes
|
||||||
|
# For Mingw
|
||||||
|
#WINDOWS_HEADERS = $mingw_windows_includes
|
||||||
|
# For Wine
|
||||||
|
#WINDOWS_HEADERS = $wine_windows_includes
|
||||||
|
|
||||||
|
WINDOWS_HEADERS = $$default_headers
|
||||||
|
|
||||||
|
CC = gcc
|
||||||
|
RM = rm -f
|
||||||
|
TOUCH = touch
|
||||||
|
|
||||||
|
INCLUDE_DIRS = -I\$(WINDOWS_HEADERS) -I./include
|
||||||
|
CC_OPTS = \$(INCLUDE_DIRS) $cc_opts -include \$(WINDOWS_HEADERS)/windows.h
|
||||||
|
|
||||||
|
EOH
|
||||||
|
|
||||||
# iterate over each 'tests' directory
|
# iterate over each 'tests' directory
|
||||||
|
print MAKE_FH "TEST_O_FILES_wtmain = ./programs/winetest/wtmain.o\n";
|
||||||
foreach $dir (@testdirs) {
|
foreach $dir (@testdirs) {
|
||||||
my($rootdir);
|
my($rootdir);
|
||||||
my($testname)=get_testname($dir);
|
my($testname)=get_testname($dir);
|
||||||
|
@ -114,7 +154,7 @@ foreach $dir (@testdirs) {
|
||||||
push(@ok_list,$newfile);
|
push(@ok_list,$newfile);
|
||||||
}
|
}
|
||||||
# create the testslist.c file for each directory
|
# create the testslist.c file for each directory
|
||||||
system("./programs/winetest/make_ctests $dir/*.c > $dir/testlist.c");
|
system("./programs/winetest/make_ctests @filelist > $dir/testlist.c");
|
||||||
push @filelist,"$dir/testlist.c";
|
push @filelist,"$dir/testlist.c";
|
||||||
push(@gooddirs,$dir);
|
push(@gooddirs,$dir);
|
||||||
print MAKE_FH "# $dir\n";
|
print MAKE_FH "# $dir\n";
|
||||||
|
@ -133,6 +173,7 @@ foreach $dir (@testdirs) {
|
||||||
}
|
}
|
||||||
die "No C files found\n" if (!scalar(@gooddirs));
|
die "No C files found\n" if (!scalar(@gooddirs));
|
||||||
# The prerequisites for the tests are that the .ok fiels get created
|
# The prerequisites for the tests are that the .ok fiels get created
|
||||||
|
print MAKE_FH "\n# .ok result files\n";
|
||||||
print MAKE_FH "TEST_OK_FILES = \\\n";
|
print MAKE_FH "TEST_OK_FILES = \\\n";
|
||||||
foreach $file (@ok_list) {
|
foreach $file (@ok_list) {
|
||||||
if($file ne $ok_list[$#ok_list]) {
|
if($file ne $ok_list[$#ok_list]) {
|
||||||
|
@ -145,11 +186,24 @@ print MAKE_FH "\n";
|
||||||
print MAKE_FH "all: \$(TEST_OK_FILES)\n";
|
print MAKE_FH "all: \$(TEST_OK_FILES)\n";
|
||||||
print MAKE_FH "\n";
|
print MAKE_FH "\n";
|
||||||
|
|
||||||
|
#define how to clean everything up
|
||||||
|
print MAKE_FH "clean:\n";
|
||||||
|
print MAKE_FH " \$(RM) \$(TEST_OK_FILES)\n";
|
||||||
|
print MAKE_FH "\n";
|
||||||
|
print MAKE_FH "distclean:\n";
|
||||||
|
print MAKE_FH " \$(RM) \$(TEST_OK_FILES)\n";
|
||||||
|
print MAKE_FH " \$(RM) \$(TEST_O_FILES_wtmain)\n";
|
||||||
|
foreach $dir (@gooddirs) {
|
||||||
|
my($rootdir)=fix_dir($dir);
|
||||||
|
print MAKE_FH " \$(RM) \$(TEST_EXE_${rootdir}) \$(TEST_O_FILES_${rootdir})\n";
|
||||||
|
}
|
||||||
|
print MAKE_FH "\n";
|
||||||
|
|
||||||
#define how to make the executables
|
#define how to make the executables
|
||||||
foreach $dir (@gooddirs) {
|
foreach $dir (@gooddirs) {
|
||||||
my($rootdir)=fix_dir($dir);
|
my($rootdir)=fix_dir($dir);
|
||||||
print MAKE_FH "\$(TEST_EXE_${rootdir}): \$(TEST_O_FILES_${rootdir}) ./programs/winetest/wtmain.o\n";
|
print MAKE_FH "\$(TEST_EXE_${rootdir}): \$(TEST_O_FILES_${rootdir}) \$(TEST_O_FILES_wtmain)\n";
|
||||||
print MAKE_FH " \$(CC) \$(CC_OPTS) \$(TEST_O_FILES_${rootdir}) ./programs/winetest/wtmain.o -o \$@\n";
|
print MAKE_FH " \$(CC) \$(CC_OPTS) \$(TEST_O_FILES_${rootdir}) \$(TEST_O_FILES_wtmain) -o \$@\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
# define how to make to .ok files
|
# define how to make to .ok files
|
||||||
|
@ -157,7 +211,7 @@ foreach $file (@ok_list) {
|
||||||
my($dir,$test) = ($file =~ /^(.*[\\\/]+tests)[\\\/]+(.*)\.ok$/);
|
my($dir,$test) = ($file =~ /^(.*[\\\/]+tests)[\\\/]+(.*)\.ok$/);
|
||||||
|
|
||||||
print MAKE_FH "$file: \$(TEST_EXE_". fix_dir($file) . ")\n";
|
print MAKE_FH "$file: \$(TEST_EXE_". fix_dir($file) . ")\n";
|
||||||
print MAKE_FH " \$< $test && touch \$@\n";
|
print MAKE_FH " \$< $test && \$(TOUCH) \$@\n";
|
||||||
}
|
}
|
||||||
# define how to make the .o files
|
# define how to make the .o files
|
||||||
|
|
||||||
|
@ -169,23 +223,6 @@ if($archive ne "") {
|
||||||
}
|
}
|
||||||
exit 0;
|
exit 0;
|
||||||
|
|
||||||
|
|
||||||
sub usage
|
|
||||||
{
|
|
||||||
print STDERR <<EOF;
|
|
||||||
|
|
||||||
Usage: $0 [options]
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-v verbose mode (can be specified multiple times)
|
|
||||||
-T dir set Wine tree top directory (autodetected if not specified)
|
|
||||||
-z file archive (zip) all needed files for test
|
|
||||||
-g file archive (tar.gz) all needed files for test
|
|
||||||
-h Show this message
|
|
||||||
NOTE: You can specify either -g or -z but not both
|
|
||||||
EOF
|
|
||||||
exit 1;
|
|
||||||
}
|
|
||||||
sub fix_dir {
|
sub fix_dir {
|
||||||
my($dir)=shift @_;
|
my($dir)=shift @_;
|
||||||
my($rootdir)=($dir =~ /^[^\\\/]*[\\\/]+(.+)[\\\/]+tests/);
|
my($rootdir)=($dir =~ /^[^\\\/]*[\\\/]+(.+)[\\\/]+tests/);
|
||||||
|
@ -217,7 +254,27 @@ sub create_archive($$\@) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$cmd .= " ./programs/winetest/wtmain.c";
|
$cmd .= " ./programs/winetest/wtmain.c";
|
||||||
$cmd .= " ./include/wine";
|
$cmd .= " ./include";
|
||||||
$cmd .= " ./Makefile.cyg";
|
$cmd .= " ./Makefile.win";
|
||||||
system "$cmd";
|
system "$cmd";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub usage
|
||||||
|
{
|
||||||
|
print STDERR <<EOF;
|
||||||
|
|
||||||
|
Usage: $0 [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-v verbose mode (can be specified multiple times)
|
||||||
|
-T dir set Wine tree top directory (autodetected if not specified)
|
||||||
|
-z file archive (zip) all needed files for test
|
||||||
|
-g file archive (tar.gz) all needed files for test
|
||||||
|
-i dir specify directory where windows.h lives
|
||||||
|
-s sys specify system to build on (this sets the default header dir)
|
||||||
|
Valid values for 'sys' are: cygwin, mingw, and wine
|
||||||
|
-h Show this message
|
||||||
|
NOTE: You can specify either -g or -z but not both
|
||||||
|
EOF
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue