Commit b1f478fa authored by Geoffrey Hausheer's avatar Geoffrey Hausheer Committed by Alexandre Julliard

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).
parent 43230a2f
#!/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; ...@@ -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) ...@@ -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>) { ...@@ -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) { ...@@ -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) { ...@@ -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"; ...@@ -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) { ...@@ -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 "") { ...@@ -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($$\@) { ...@@ -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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment