Commit 905658c4 authored by Dimitrie O. Paun's avatar Dimitrie O. Paun Committed by Alexandre Julliard

Generate a simple Makefile that uses winegcc to compile.

No longer generate a configure script, that's project policy.
parent 0d203bd7
......@@ -2,7 +2,7 @@
use strict;
# Copyright 2000-2002 Francois Gouget for CodeWeavers
# fgouget@codeweavers.com
# Copyright 2004 Dimitrie O. Paun
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
......@@ -19,7 +19,7 @@ use strict;
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
my $version="0.5.9";
my $version="0.6.0";
use Cwd;
use File::Basename;
......@@ -116,15 +116,10 @@ my $opt_ask_target_options;
##
# If false then winemaker should not generate any file, i.e.
# no makefiles, but also no .spec files, no configure.in, etc.
# no makefiles, but also no .spec files, etc.
my $opt_no_generated_files;
##
# If true then winemaker should not generate the spec files.
# This is useful if winemaker is being used to create a build environment
my $opt_no_generated_specs;
##
# Specifies not to print the banner if set.
my $opt_no_banner;
......@@ -222,14 +217,6 @@ my $TT_DLL=3;
# The following constants further refine how the target should be handled
##
# This target needs a wrapper
my $TF_WRAP=1;
##
# This target is a wrapper
my $TF_WRAPPER=2;
##
# This target is an MFC-based target
my $TF_MFC=4;
......@@ -266,7 +253,6 @@ sub target_init($)
@$target[$T_DLLS]=[];
@$target[$T_LIBRARY_PATH]=[];
@$target[$T_LIBRARIES]=[];
@$target[$T_DEPENDS]=[];
}
sub get_default_init($)
......@@ -360,11 +346,6 @@ my @main_project;
# sources fields.
my @global_settings;
##
# If one of the projects requires the MFc then we set this global variable
# to true so that configure asks the user to provide a path tothe MFC
my $needs_mfc=0;
#####
......@@ -443,27 +424,11 @@ sub source_set_options($$)
} elsif ($option =~ /^-P/) {
push @{@$target[$T_DLL_PATH]},"-L$'";
} elsif ($option =~ /^-i/) {
my $dllname = $';
if ($dllname =~ /^msvcrt$/) {
push @{@$target[$T_INCLUDE_PATH]},"-I\$(WINE_INCLUDE_ROOT)/msvcrt";
}
push @{@$target[$T_DLLS]},$dllname;
push @{@$target[$T_DLLS]},"$'";
} elsif ($option =~ /^-L/) {
push @{@$target[$T_LIBRARY_PATH]},$option;
} elsif ($option =~ /^-l/) {
push @{@$target[$T_LIBRARIES]},"$'";
} elsif ($option =~ /^--wrap/) {
if (@$target[$T_TYPE] != $TT_DLL) {
@$target[$T_FLAGS]|=$TF_WRAP;
} else {
print STDERR "warning: option --wrap is illegal for DLLs - ignoring";
};
} elsif ($option =~ /^--nowrap/) {
if (@$target[$T_TYPE] != $TT_DLL) {
@$target[$T_FLAGS]&=~$TF_WRAP;
} else {
print STDERR "warning: option --nowrap is illegal for DLLs - ignoring";
}
} elsif ($option =~ /^--mfc/) {
@$target[$T_FLAGS]|=$TF_MFC;
@$target[$T_FLAGS]&=~$TF_NOMFC;
......@@ -479,12 +444,6 @@ sub source_set_options($$)
return 0;
}
}
if (@$target[$T_TYPE] != $TT_DLL &&
@$target[$T_FLAGS] & $TF_MFC &&
!(@$target[$T_FLAGS] & $TF_WRAP)) {
print STDERR "info: option --mfc requires --wrap";
@$target[$T_FLAGS]|=$TF_WRAP;
}
return 1;
}
......@@ -745,13 +704,7 @@ sub source_scan_directory($$$$)
if ((@$project_settings[$T_FLAGS] & $TF_MFC)!=0) {
$flag_desc="mfc";
}
if ((@$project_settings[$T_FLAGS] & $TF_WRAP)!=0) {
if ($flag_desc ne "") {
$flag_desc.=", ";
}
$flag_desc.="wrapped";
}
print "* Type any project-wide options (-D/-I/-P/-i/-L/-l/--mfc/--wrap),\n";
print "* Type any project-wide options (-D/-I/-P/-i/-L/-l/--mfc),\n";
if (defined $flag_desc) {
print "* (currently $flag_desc)\n";
}
......@@ -789,7 +742,6 @@ sub source_scan_directory($$$$)
if ($target_name =~ /\.dll$/) {
@$target[$T_TYPE]=$TT_DLL;
@$target[$T_INIT]=get_default_init($TT_DLL);
@$target[$T_FLAGS]&=~$TF_WRAP;
push @local_depends,"$target_name.so";
push @local_dlls,$target_name;
} else {
......@@ -801,7 +753,7 @@ sub source_scan_directory($$$$)
$basename=~ s/\.(dll|exe)$//i;
# This is the default link list of Visual Studio, except odbccp32
# which we don't have in Wine.
my @std_imports=qw(advapi32 comdlg32 gdi32 kernel32 odbc32 ole32 oleaut32 shell32 user32 winspool);
my @std_imports=qw(odbc32 ole32 oleaut32 winspool);
my @std_libraries=qw(uuid);
if ((@$target[$T_FLAGS] & $TF_NODLLS) == 0) {
@$target[$T_DLLS]=\@std_imports;
......@@ -810,9 +762,6 @@ sub source_scan_directory($$$$)
@$target[$T_DLLS]=[];
@$target[$T_LIBRARIES]=[];
}
if ((@$target[$T_FLAGS] & $TF_NOMSVCRT) == 0) {
push @{@$target[$T_DLLS]},"msvcrt";
}
push @{@$project[$P_TARGETS]},$target;
# Ask for target-specific options
......@@ -821,18 +770,10 @@ sub source_scan_directory($$$$)
if ((@$target[$T_FLAGS] & $TF_MFC)!=0) {
$flag_desc=" (mfc";
}
if ((@$target[$T_FLAGS] & $TF_WRAP)!=0) {
if ($flag_desc ne "") {
$flag_desc.=", ";
} else {
$flag_desc=" (";
}
$flag_desc.="wrapped";
}
if ($flag_desc ne "") {
$flag_desc.=")";
}
print "* Specify any link option (-P/-i/-L/-l/--mfc/--wrap) specific to the target\n";
print "* Specify any link option (-P/-i/-L/-l/--mfc) specific to the target\n";
print "* \"$target_name\"$flag_desc or 'never' to not be asked this question again:\n";
while (1) {
my $options=<STDIN>;
......@@ -846,7 +787,6 @@ sub source_scan_directory($$$$)
print "Please re-enter the options:\n";
}
}
push @{@$target[$T_DLL_PATH]},"-L\$(WINE_DLL_ROOT)";
if (@$target[$T_FLAGS] & $TF_MFC) {
@$project_settings[$T_FLAGS]|=$TF_MFC;
push @{@$target[$T_DLL_PATH]},"\$(MFC_LIBRARY_PATH)";
......@@ -910,12 +850,13 @@ sub source_scan_directory($$$$)
$opt_ask_target_options=$OPT_ASK_YES;
}
if ((@$project_settings[$T_FLAGS] & $TF_NOMSVCRT) == 0) {
push @{@$project_settings[$T_DEFINES]},"-mno-cygwin";
}
if (@$project_settings[$T_FLAGS] & $TF_MFC) {
push @{@$project_settings[$T_INCLUDE_PATH]},"\$(MFC_INCLUDE_PATH)";
}
if ((@$project_settings[$T_FLAGS] & $TF_NOMSVCRT)==0) {
push @{@$project_settings[$T_INCLUDE_PATH]},"-I\$(WINE_INCLUDE_ROOT)/msvcrt";
}
# The sources that did not match, if any, go to the extra
# source list of the project settings
foreach my $source (@sources_c) {
......@@ -950,7 +891,6 @@ sub source_scan_directory($$$$)
foreach my $target (@exe_list) {
push @{@$target[$T_DLL_PATH]},"-L.";
push @{@$target[$T_DLLS]},@local_dlls;
push @{@$target[$T_DEPENDS]},@local_depends;
}
}
}
......@@ -981,62 +921,6 @@ sub source_scan()
@projects=sort { @$a[$P_PATH] cmp @$b[$P_PATH] } @projects;
}
#####
#
# 'vc.dsp'-based Project analysis
#
#####
#sub analyze_vc_dsp
#{
#
#}
#####
#
# Creating the wrapper targets
#
#####
sub postprocess_targets()
{
foreach my $project (@projects) {
foreach my $target (@{@$project[$P_TARGETS]}) {
if ((@$target[$T_FLAGS] & $TF_WRAP) != 0) {
my $wrapper=[];
target_init($wrapper);
@$wrapper[$T_NAME]=@$target[$T_NAME];
@$wrapper[$T_TYPE]=@$target[$T_TYPE];
@$wrapper[$T_INIT]=get_default_init(@$target[$T_TYPE]);
@$wrapper[$T_FLAGS]=$TF_WRAPPER | (@$target[$T_FLAGS] & $TF_MFC);
@$wrapper[$T_DLLS]=[ "kernel32", "user32" ];
push @{@$wrapper[$T_LIBRARIES]}, "dl";
push @{@$wrapper[$T_SOURCES_C]},"@$wrapper[$T_NAME]_wrapper.c";
my $index=bsearch(@$target[$T_SOURCES_C],"@$wrapper[$T_NAME]_wrapper.c");
if (defined $index) {
splice(@{@$target[$T_SOURCES_C]},$index,1);
}
@$target[$T_NAME]=@$target[$T_NAME];
@$target[$T_NAME]=~ s/.exe$/.dll/;
@$target[$T_TYPE]=$TT_DLL;
push @{@$project[$P_TARGETS]},$wrapper;
}
if ((@$target[$T_FLAGS] & $TF_MFC) != 0) {
@{@$project[$P_SETTINGS]}[$T_FLAGS]|=$TF_MFC;
$needs_mfc=1;
}
}
}
}
#####
#
# Source search
......@@ -1601,9 +1485,6 @@ sub fix_source()
print "Fixing the source files...\n";
foreach my $project (@projects) {
foreach my $target (@$project[$P_SETTINGS],@{@$project[$P_TARGETS]}) {
if (@$target[$T_FLAGS] & $TF_WRAPPER) {
next;
}
foreach my $source (@{@$target[$T_SOURCES_C]}, @{@$target[$T_SOURCES_CXX]}, @{@$target[$T_SOURCES_RC]}, @{@$target[$T_SOURCES_MISC]}) {
fix_file($source,$project,$target);
}
......@@ -1620,59 +1501,6 @@ sub fix_source()
#####
##
# Generates a target's .spec file
sub generate_spec_file($$$)
{
return if ($opt_no_generated_specs);
my $path=$_[0];
my $target=$_[1];
my $project_settings=$_[2];
my $basename=@$target[$T_NAME];
if (@$target[$T_FLAGS] & $TF_WRAPPER) {
$basename.="_wrapper";
}
if (!open(FILEO,">$path$basename.spec")) {
print STDERR "error: could not open \"$path$basename.spec\" for writing\n";
print STDERR " $!\n";
return;
}
# Don't forget to export the 'Main' function for wrapped executables,
# except for MFC ones!
if ((@$target[$T_FLAGS]&($TF_WRAP|$TF_WRAPPER|$TF_MFC)) == $TF_WRAP) {
if (@$target[$T_TYPE] == $TT_GUIEXE) {
print FILEO "\n@ stdcall @$target[$T_INIT](long long ptr long) @$target[$T_INIT]\n";
} elsif (@$target[$T_TYPE] == $TT_CUIEXE) {
print FILEO "\n@ stdcall @$target[$T_INIT](long ptr ptr) @$target[$T_INIT]\n";
} else {
print FILEO "\n@ stdcall @$target[$T_INIT](ptr long ptr) @$target[$T_INIT]\n";
}
}
close(FILEO);
}
##
# Generates a target's wrapper file
sub generate_wrapper_file($$)
{
my $path=$_[0];
my $target=$_[1];
my $app_name=@$target[$T_NAME];
my $wrapper_name=$app_name;
$app_name=~ s/\.exe$/\.dll/;
return generate_from_template("$path${wrapper_name}_wrapper.c","wrapper.c",[
["APP_NAME",$app_name],
["APP_TYPE",(@$target[$T_TYPE]==$TT_GUIEXE?"GUIEXE":"CUIEXE")],
["APP_INIT",(@$target[$T_TYPE]==$TT_GUIEXE?"\"WinMain\"":"\"main\"")],
["APP_MFC",(@$target[$T_FLAGS] & $TF_MFC?"\"mfc\"":"NULL")]]);
}
##
# A convenience function to generate all the lists (defines,
# C sources, C++ source, etc.) in the Makefile
sub generate_list($$$;$)
......@@ -1730,8 +1558,8 @@ sub generate_project_files($)
push @{@$project[$P_TARGETS]}, @dll_list;
push @{@$project[$P_TARGETS]}, @exe_list;
if (!open(FILEO,">@$project[$P_PATH]Makefile.in")) {
print STDERR "error: could not open \"@$project[$P_PATH]/Makefile.in\" for writing\n";
if (!open(FILEO,">@$project[$P_PATH]Makefile")) {
print STDERR "error: could not open \"@$project[$P_PATH]/Makefile\" for writing\n";
print STDERR " $!\n";
return;
}
......@@ -1739,16 +1567,7 @@ sub generate_project_files($)
print FILEO "### Generated by Winemaker\n";
print FILEO "\n\n";
print FILEO "### Generic autoconf variables\n\n";
generate_list("TOPSRCDIR",1,[ "\@top_srcdir\@" ]);
my $dotdotpath=@$project[$P_PATH];
$dotdotpath =~ s%[^/]+%..%g;
$dotdotpath =~ s%/$%%;
$dotdotpath = "." if ($dotdotpath eq "");
generate_list("TOPOBJDIR",1,[ $dotdotpath ]);
generate_list("SRCDIR",1,[ "\@srcdir\@" ]);
generate_list("VPATH",1,[ "\@srcdir\@" ]);
print FILEO "\n";
generate_list("SRCDIR",1,[ "." ]);
if (@$project[$P_PATH] eq "") {
# This is the main project. It is also responsible for recursively
# calling the other projects
......@@ -1825,9 +1644,8 @@ sub generate_project_files($)
generate_list("${canon}_DLLS",1,@$target[$T_DLLS]);
generate_list("${canon}_LIBRARY_PATH",1,@$target[$T_LIBRARY_PATH]);
generate_list("${canon}_LIBRARIES",1,@$target[$T_LIBRARIES]);
generate_list("${canon}_DEPENDS",1,@$target[$T_DEPENDS]);
print FILEO "\n";
generate_list("${canon}_OBJS",1,["\$(${canon}_C_SRCS:.c=.o)","\$(${canon}_CXX_SRCS:.cpp=.o)","\$(EXTRA_OBJS)"]);
generate_list("${canon}_OBJS",1,["\$(${canon}_C_SRCS:.c=.o)","\$(${canon}_CXX_SRCS:.cpp=.o)","\$(${canon}_RC_SRCS:.rc=.res)"]);
print FILEO "\n\n\n";
}
print FILEO "### Global source lists\n\n";
......@@ -1865,59 +1683,23 @@ sub generate_project_files($)
return "\$(${canon}_SPEC_SRCS)";
});
}
print FILEO "\n\n\n";
print FILEO "\n\n";
print FILEO "### Tools\n\n";
print FILEO "CC = winegcc\n";
print FILEO "CXX = wineg++\n";
print FILEO "RC = wrc\n";
print FILEO "WINEBUILD = winebuild\n";
print FILEO "\n\n";
print FILEO "### Generic autoconf targets\n\n";
print FILEO "all:";
if (@$project[$P_PATH] eq "") {
print FILEO " wineapploader";
print FILEO " \$(SUBDIRS)";
}
if (@{@$project[$P_TARGETS]} > 0) {
print FILEO " \$(DLLS:%=%.so) \$(EXES:%=%.so)";
}
print FILEO "\n\n";
if (@$project[$P_PATH] eq "") {
print FILEO "wineapploader: wineapploader.in\n";
print FILEO "\tsed -e 's,\@bindir\\\@,\$(bindir),g' " .
"-e 's,\@winelibdir\\\@,.,g' " .
"\$(SRCDIR)/wineapploader.in >\$\@ || \$(RM) \$\@\n";
print FILEO "\n";
}
print FILEO "\@MAKE_RULES\@\n";
print FILEO "\n";
print FILEO "install::\n";
if (@$project[$P_PATH] eq "") {
# This is the main project. It is also responsible for recursively
# calling the other projects
print FILEO "\t_list=\"\$(SUBDIRS)\"; for i in \$\$_list; do (cd \$\$i; \$(MAKE) install) || exit 1; done\n";
}
if (@{@$project[$P_TARGETS]} > 0) {
print FILEO "\t_list=\"\$(EXES:%.exe=%)\"; for i in \$\$_list; do \$(INSTALL_SCRIPT) \$\$i \$(bindir); done\n";
print FILEO "\t_list=\"\$(EXES:%=%.so) \$(DLLS:%=%.so)\"; for i in \$\$_list; do \$(INSTALL_PROGRAM) \$\$i \$(dlldir); done\n";
}
print FILEO "\n";
print FILEO "uninstall::\n";
if (@$project[$P_PATH] eq "") {
# This is the main project. It is also responsible for recursively
# calling the other projects
print FILEO "\t_list=\"\$(SUBDIRS)\"; for i in \$\$_list; do (cd \$\$i; \$(MAKE) uninstall) || exit 1; done\n";
}
if (@{@$project[$P_TARGETS]} > 0) {
print FILEO "\t_list=\"\$(EXES:%.exe=%)\"; for i in \$\$_list; do \$(RM) \$(bindir)/\$\$i;done\n";
print FILEO "\t_list=\"\$(EXES:%=%.so) \$(DLLS:%=%.so)\"; for i in \$\$_list; do \$(RM) \$(dlldir)/\$\$i;done\n";
}
print FILEO "\n";
if (@$project[$P_PATH] eq "") {
print FILEO "clean::\n";
print FILEO "\t\$(RM) wineapploader\n";
print FILEO "\n";
print FILEO "distclean: clean\n";
print FILEO "\t\$(RM) config.* configure.lineno Make.rules\n";
print FILEO "\t\$(RM) -r autom4te.cache\n";
print FILEO "\tfind . -name Makefile -exec \$(RM) {} \\;\n";
print FILEO "\n";
}
if (@{@$project[$P_TARGETS]} > 0) {
print FILEO "### Target specific build rules\n\n";
......@@ -1934,191 +1716,44 @@ sub generate_project_files($)
$mode = "";
}
if (@$target[$T_FLAGS] & $TF_WRAPPER) {
$all_dlls="\$(${canon}_DLLS:%=-l%)";
$all_libs="\$(${canon}_LIBRARIES:%=-l%) \$(WINE_LIBRARIES)";
} else {
$all_dlls="\$(${canon}_DLLS:%=-l%) \$(GLOBAL_DLLS:%=-l%)";
$all_libs="\$(${canon}_LIBRARIES:%=-l%) \$(ALL_LIBRARIES)";
}
$all_dlls="\$(${canon}_DLLS:%=-l%) \$(GLOBAL_DLLS:%=-l%)";
$all_libs="\$(${canon}_LIBRARIES:%=-l%) \$(ALL_LIBRARIES)";
print FILEO "\$(${canon}_MODULE).dbg.c: \$(${canon}_C_SRCS) \$(${canon}_CXX_SRCS)\n";
print FILEO "\t\$(LDPATH) \$(WINEBUILD) -o \$\@ --debug -C\$(SRCDIR) \$(${canon}_C_SRCS) \$(${canon}_CXX_SRCS)\n";
print FILEO "%.res: %.rc:\n";
print FILEO " \$(RC) \$(RCFLAGS) -fo\$@ \$<\n";
print FILEO "\n";
print FILEO "\$(${canon}_MODULE).spec.c: \$(${canon}_SPEC_SRCS) \$(${canon}_RC_SRCS:.rc=.res) \$(${canon}_OBJS)\n";
print FILEO "\t\$(LDPATH) \$(WINEBUILD) -fPIC -o \$\@ $mode \$(${canon}_SPEC_SRCS:%=--spec %) \$(${canon}_RC_SRCS:%.rc=%.res) \$(${canon}_OBJS) \$(${canon}_DLL_PATH) \$(WINE_DLL_PATH) \$(GLOBAL_DLL_PATH) $all_dlls\n";
print FILEO "\$(${canon}_MODULE).dbg.c: \$(${canon}_C_SRCS) \$(${canon}_CXX_SRCS)\n";
print FILEO "\t\$(WINEBUILD) -o \$\@ --debug -C\$(SRCDIR) \$(${canon}_C_SRCS) \$(${canon}_CXX_SRCS)\n";
print FILEO "\n";
print FILEO "\$(${canon}_MODULE).so: \$(${canon}_MODULE).dbg.o \$(${canon}_MODULE).spec.o \$(${canon}_OBJS) \$(${canon}_DEPENDS)\n";
print FILEO "\$(${canon}_MODULE).so: \$(${canon}_MODULE).dbg.o \$(${canon}_OBJS)\n";
if (@{@$target[$T_SOURCES_CXX]} > 0 or @{@$project_settings[$T_SOURCES_CXX]} > 0) {
print FILEO "\t\$(LDXXSHARED)";
print FILEO "\t\$(CXX)";
} else {
print FILEO "\t\$(LDSHARED)";
print FILEO "\t\$(CC)";
}
print FILEO " \$(LDDLLFLAGS) -o \$\@ \$(${canon}_OBJS) \$(${canon}_MODULE).dbg.o \$(${canon}_MODULE).spec.o \$(${canon}_LIBRARY_PATH) \$(ALL_LIBRARY_PATH) $all_libs \$(LIBS)\n";
if (@$target[$T_TYPE] != $TT_DLL) {
print FILEO "\ttest -f \$(${canon}_BASEMODULE) || \$(INSTALL_SCRIPT) \$(TOPOBJDIR)/wineapploader \$(${canon}_BASEMODULE)\n";
if ($opt_target_type == $TT_GUIEXE) {
print FILEO " -mwindows";
} else {
print FILEO " -mconsole";
}
print FILEO " \$(LDDLLFLAGS) -o \$\@ \$(${canon}_OBJS) \$(${canon}_MODULE).dbg.o \$(${canon}_LIBRARY_PATH) \$(ALL_LIBRARY_PATH) $all_libs \$(LIBS)\n";
print FILEO "\n\n";
}
}
close(FILEO);
foreach my $target (@{@$project[$P_TARGETS]}) {
if (@$target[$T_TYPE] == $TT_DLL) {
generate_spec_file(@$project[$P_PATH],$target,$project_settings);
}
if (@$target[$T_FLAGS] & $TF_WRAPPER) {
generate_wrapper_file(@$project[$P_PATH],$target);
}
}
}
##
# Perform the replacements in the template configure files
# Return 1 for success, 0 for failure
sub generate_from_template($$;$)
{
my $filename=$_[0];
my $template=$_[1];
my $substitutions=$_[2];
if (!defined $templates{$template}) {
print STDERR "winemaker: internal error: No template called '$template'\n";
return 0;
}
if (!open(FILEO,">$filename")) {
print STDERR "error: unable to open \"$filename\" for writing:\n";
print STDERR " $!\n";
return 0;
}
my $warned;
foreach my $line (@{$templates{$template}}) {
if ($line =~ /(\#\#WINEMAKER_[A-Z_]+\#\#)/) {
if (defined $substitutions) {
foreach my $pattern (@$substitutions) {
$line =~ s%\#\#WINEMAKER_@$pattern[0]\#\#%@$pattern[1]%;
}
}
if (!$warned and $line =~ /(\#\#WINEMAKER_[A-Z_]+\#\#)/) {
print STDERR "warning: no value was provided for template $1 in \"$filename\"\n";
$warned=1;
}
}
print FILEO $line;
}
close(FILEO);
return 1;
}
##
# Generates the global files:
# configure
# configure.ac
# Make.rules.in
# wineapploader.in
sub generate_global_files()
{
my @include_path;
foreach my $path (@{$global_settings[$T_INCLUDE_PATH]}) {
if ($path !~ /^-L/ or is_absolute($')) {
push @include_path, $path;
} else {
push @include_path, "-L\$(TOPSRCDIR)/$'";
}
}
my @dll_path;
foreach my $path (@{$global_settings[$T_DLL_PATH]}) {
if ($path !~ /^-L/ or is_absolute($')) {
push @dll_path, $path;
} else {
push @dll_path, "-L\$(TOPSRCDIR)/$'";
}
}
my @library_path;
foreach my $path (@{$global_settings[$T_LIBRARY_PATH]}) {
if ($path !~ /^-L/ or is_absolute($')) {
push @library_path, $path;
} else {
push @library_path, "-L\$(TOPSRCDIR)/$'";
}
}
generate_from_template("Make.rules.in","Make.rules.in",[
["DEFINES", join(" ", @{$global_settings[$T_DEFINES]}) ],
["INCLUDE_PATH", join(" ", @include_path) ],
["DLL_PATH", join(" ", @dll_path) ],
["DLLS", join(" ", @{$global_settings[$T_DLLS]}) ],
["LIBRARY_PATH", join(" ", @library_path) ],
["LIBRARIES", join(" ", @{$global_settings[$T_LIBRARIES]}) ]]);
generate_from_template("wineapploader.in","wineapploader.in");
# Get the name of a source file for configure.ac
my $a_source_file;
search_a_file: foreach my $project (@projects) {
foreach my $target (@{@$project[$P_TARGETS]}, @$project[$P_SETTINGS]) {
$a_source_file=@{@$target[$T_SOURCES_C]}[0];
if (!defined $a_source_file) {
$a_source_file=@{@$target[$T_SOURCES_CXX]}[0];
}
if (!defined $a_source_file) {
$a_source_file=@{@$target[$T_SOURCES_RC]}[0];
}
if (defined $a_source_file) {
$a_source_file="@$project[$P_PATH]$a_source_file";
last search_a_file;
}
}
}
if (!defined $a_source_file) {
$a_source_file="Makefile.in";
}
generate_from_template("configure.ac","configure.ac",[
["PROJECTS",join("\n",map { "@$_[$P_PATH]Makefile" } @projects)],
["SOURCE","$a_source_file"],
["NEEDS_MFC","$needs_mfc"]]);
system("autoconf configure.ac > configure");
# Add execute permission to configure for whoever has the right to read it
my @st=stat("configure");
if (@st) {
my $mode=$st[2];
$mode|=($mode & 0444) >>2;
chmod($mode,"configure");
} else {
print "warning: could not generate the configure script. You need to run autoconf\n";
}
}
##
#
sub generate_read_templates()
{
my $file;
while (<DATA>) {
if (/^--- ((\w\.?)+) ---$/) {
my $filename=$1;
if (defined $templates{$filename}) {
print STDERR "winemaker: internal error: There is more than one template for $filename\n";
undef $file;
} else {
$file=[];
$templates{$filename}=$file;
}
} elsif (defined $file) {
push @$file, $_;
}
}
}
##
# This is where we finally generate files. In fact this method does not
# do anything itself but calls the methods that do the actual work.
sub generate()
{
print "Generating project files...\n";
generate_read_templates();
generate_global_files();
foreach my $project (@projects) {
my $path=@$project[$P_PATH];
......@@ -2152,7 +1787,6 @@ $opt_is_interactive=$OPT_ASK_NO;
$opt_ask_project_options=$OPT_ASK_NO;
$opt_ask_target_options=$OPT_ASK_NO;
$opt_no_generated_files=0;
$opt_no_generated_specs=0;
$opt_no_source_fix=0;
$opt_no_banner=0;
......@@ -2175,12 +1809,11 @@ sub usage()
print_banner();
print STDERR "Usage: winemaker [--nobanner] [--backup|--nobackup] [--nosource-fix]\n";
print STDERR " [--lower-none|--lower-all|--lower-uppercase]\n";
print STDERR " [--lower-include|--nolower-include]\n";
print STDERR " [--lower-include|--nolower-include] [--mfc|--nomfc]\n";
print STDERR " [--guiexe|--windows|--cuiexe|--console|--dll]\n";
print STDERR " [--wrap|--nowrap] [--mfc|--nomfc]\n";
print STDERR " [-Dmacro[=defn]] [-Idir] [-Pdir] [-idll] [-Ldir] [-llibrary]\n";
print STDERR " [--nodlls] [--nomsvcrt] [--interactive] [--single-target name]\n";
print STDERR " [--generated-files|--nogenerated-files] [--nogenerated-specs]\n";
print STDERR " [--generated-files|--nogenerated-files]\n";
print STDERR " work_directory\n";
print STDERR "\nWinemaker is designed to recursively convert all the Windows sources found in\n";
print STDERR "the specified directory so that they can be compiled with Winelib. During this\n";
......@@ -2218,9 +1851,6 @@ while (@ARGV>0) {
$opt_no_generated_files=0;
} elsif ($arg eq "--nogenerated-files") {
$opt_no_generated_files=1;
} elsif ($arg eq "--nogenerated-specs") {
$opt_no_generated_specs=1;
} elsif ($arg =~ /^-D/) {
push @{$global_settings[$T_DEFINES]},$arg;
} elsif ($arg =~ /^-I/) {
......@@ -2228,11 +1858,7 @@ while (@ARGV>0) {
} elsif ($arg =~ /^-P/) {
push @{$global_settings[$T_DLL_PATH]},"-L$'";
} elsif ($arg =~ /^-i/) {
my $dllname = $';
if ($dllname =~ /^msvcrt$/) {
push @{$global_settings[$T_INCLUDE_PATH]},"-I\$(WINE_INCLUDE_ROOT)/msvcrt";
}
push @{$global_settings[$T_DLLS]},$dllname;
push @{$global_settings[$T_DLLS]},$';
} elsif ($arg =~ /^-L/) {
push @{$global_settings[$T_LIBRARY_PATH]},$arg;
} elsif ($arg =~ /^-l/) {
......@@ -2249,17 +1875,11 @@ while (@ARGV>0) {
$opt_is_interactive=$OPT_ASK_YES;
$opt_ask_project_options=$OPT_ASK_YES;
$opt_ask_target_options=$OPT_ASK_YES;
} elsif ($arg eq "--wrap") {
$opt_flags|=$TF_WRAP;
} elsif ($arg eq "--nowrap") {
$opt_flags&=~$TF_WRAP;
} elsif ($arg eq "--mfc") {
$opt_flags|=$TF_MFC;
$needs_mfc=1;
} elsif ($arg eq "--nomfc") {
$opt_flags&=~$TF_MFC;
$opt_flags|=$TF_NOMFC;
$needs_mfc=0;
} elsif ($arg eq "--nodlls") {
$opt_flags|=$TF_NODLLS;
} elsif ($arg eq "--nomsvcrt") {
......@@ -2278,11 +1898,6 @@ while (@ARGV>0) {
usage();
}
}
if ($opt_flags & $TF_MFC && $opt_target_type != $TT_DLL) {
print STDERR "info: option --mfc requires --wrap\n";
$opt_flags |= $TF_WRAP;
};
}
if (!defined $opt_work_dir) {
......@@ -2306,9 +1921,6 @@ fix_file_and_directory_names(".");
# Scan the sources to identify the projects and targets
source_scan();
# Create targets for wrappers, etc.
postprocess_targets();
# Fix the source files
if (! $opt_no_source_fix) {
fix_source();
......@@ -2321,1056 +1933,3 @@ if (! $opt_no_generated_files) {
__DATA__
--- configure.ac ---
dnl Process this file with autoconf to produce a configure script.
dnl Author: Michael Patra <micky@marie.physik.tu-berlin.de>
dnl <patra@itp1.physik.tu-berlin.de>
dnl Francois Gouget <fgouget@codeweavers.com> for CodeWeavers
AC_REVISION([configure.ac 1.00])
AC_INIT(##WINEMAKER_SOURCE##)
NEEDS_MFC=##WINEMAKER_NEEDS_MFC##
dnl **** Command-line arguments ****
AC_SUBST(OPTIONS)
dnl **** Check for some programs ****
AC_PROG_MAKE_SET
AC_PROG_CC
AC_PROG_CXX
AC_PROG_CPP
AC_PROG_LN_S
dnl **** Check for some libraries ****
dnl Check for -lm for BeOS
AC_CHECK_LIB(m,sqrt)
dnl Check for -lw for Solaris
AC_CHECK_LIB(w,iswalnum)
dnl Check for -lnsl for Solaris
AC_CHECK_FUNCS(gethostbyname,, AC_CHECK_LIB(nsl, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl", AC_CHECK_LIB(socket, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl", , -lnsl), -lsocket))
dnl Check for -lsocket for Solaris
AC_CHECK_FUNCS(connect,,AC_CHECK_LIB(socket,connect))
dnl **** Check for gcc strength-reduce bug ****
if test "x${GCC}" = "xyes"
then
AC_CACHE_CHECK([for gcc strength-reduce bug], ac_cv_c_gcc_strength_bug,
AC_TRY_RUN([
int main(void) {
static int Array[[3]];
unsigned int B = 3;
int i;
for(i=0; i<B; i++) Array[[i]] = i - 3;
exit( Array[[1]] != -2 );
}],
ac_cv_c_gcc_strength_bug="no",
ac_cv_c_gcc_strength_bug="yes",
ac_cv_c_gcc_strength_bug="yes") )
if test "$ac_cv_c_gcc_strength_bug" = "yes"
then
CFLAGS="$CFLAGS -fno-strength-reduce"
fi
fi
dnl **** Check for working dll ****
LDSHARED=""
LDXXSHARED=""
LDDLLFLAGS=""
AC_CACHE_CHECK([whether we can build a Linux dll],
ac_cv_c_dll_linux,
[saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -fPIC -shared -Wl,-soname,conftest.so.1.0,-Bsymbolic"
AC_TRY_LINK(,[return 1],ac_cv_c_dll_linux="yes",ac_cv_c_dll_linux="no")
CFLAGS=$saved_cflags
])
if test "$ac_cv_c_dll_linux" = "yes"
then
LDSHARED="\$(CC) -shared"
LDXXSHARED="\$(CXX) -shared"
LDDLLFLAGS="-Wl,-Bsymbolic"
AC_CACHE_CHECK([whether the linker accepts -z defs], ac_cv_c_dll_zdefs,
[saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -fPIC -shared -Wl,-Bsymbolic,-z,defs"
AC_TRY_LINK([],[],ac_cv_c_dll_zdefs="yes",ac_cv_c_dll_zdefs="no")
CFLAGS=$saved_cflags
])
if test "$ac_cv_c_dll_zdefs" = "yes"
then
LDDLLFLAGS="$LDDLLFLAGS,-z,defs"
fi
AC_CACHE_CHECK([whether the linker accepts -init and -fini], ac_cv_c_dll_init_fini,
[saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -fPIC -shared -Wl,-Bsymbolic,-init,__wine_spec_init,-fini,__wine_spec_fini"
AC_TRY_LINK([],[],ac_cv_c_dll_init_fini="yes",ac_cv_c_dll_init_fini="no")
CFLAGS=$saved_cflags
])
if test "$ac_cv_c_dll_init_fini" = "yes"
then
AC_DEFINE(HAVE_LINKER_INIT_FINI,1,[Define if the linker supports renaming the init and fini functions])
LDDLLFLAGS="$LDDLLFLAGS,-init,__wine_spec_init,-fini,__wine_spec_fini"
fi
else
AC_CACHE_CHECK([whether we can build a UnixWare (Solaris) dll],
ac_cv_c_dll_unixware,
[saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -fPIC -Wl,-G,-h,conftest.so.1.0,-B,symbolic"
AC_TRY_LINK(,[return 1],ac_cv_c_dll_unixware="yes",ac_cv_c_dll_unixware="no")
CFLAGS=$saved_cflags
])
if test "$ac_cv_c_dll_unixware" = "yes"
then
LDSHARED="\$(CC) -Wl,-G"
LDXXSHARED="\$(CXX) -Wl,-G"
LDDLLFLAGS="-Wl,-B,symbolic"
else
AC_CACHE_CHECK([whether we can build a NetBSD dll],
ac_cv_c_dll_netbsd,
[saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -fPIC -Wl,-Bshareable,-Bforcearchive"
AC_TRY_LINK(,[return 1],ac_cv_c_dll_netbsd="yes",ac_cv_c_dll_netbsd="no")
CFLAGS=$saved_cflags
])
if test "$ac_cv_c_dll_netbsd" = "yes"
then
LDSHARED="\$(CC) -Wl,-Bshareable,-Bforcearchive"
LDXXSHARED="\$(CXX) -Wl,-Bshareable,-Bforcearchive"
LDDLLFLAGS="" #FIXME
else
AC_CACHE_CHECK([whether we can build a Mach-O (Mac OS X/Darwin) dll],
ac_cv_c_dll_macho,
[saved_cflags=$CFLAGS
CFLAGS="$CFLAGS -bundle"
AC_TRY_LINK(,[return 1], ac_cv_c_dll_macho="yes", ac_cv_c_dll_macho="no")
CFLAGS=$saved_cflags
])
if test "$ac_cv_c_dll_macho" = "yes"
then
LDSHARED="\$(CC) -bundle -flat_namespace -undefined suppress"
LDXXSHARED="\$(CXX) -bundle -flat_namespace -undefined suppress"
LDDLLFLAGS="-fno-common"
CFLAGS="$CFLAGS -ffixed-r13 -no-cpp-precomp -Dsocklen_t=u_int32_t"
CXXFLAGS="$CXXFLAGS -ffixed-r13 -no-cpp-precomp -Dsocklen_t=u_int32_t"
fi
fi
fi
fi
if test "$ac_cv_c_dll_linux" = "no" -a "$ac_cv_c_dll_unixware" = "no" -a "$ac_cv_c_dll_netbsd" = "no" -a "$ac_cv_c_dll_macho" = "no"
then
AC_MSG_ERROR([Could not find how to build a dynamically linked library])
fi
CFLAGS="$CFLAGS -fPIC"
AC_SUBST(LDSHARED)
AC_SUBST(LDXXSHARED)
AC_SUBST(LDDLLFLAGS)
dnl *** check for the need to define __i386__
AC_CACHE_CHECK([whether we need to define __i386__],ac_cv_cpp_def_i386,
AC_EGREP_CPP(yes,[#if (defined(i386) || defined(__i386)) && !defined(__i386__)
yes
#endif],
ac_cv_cpp_def_i386="yes", ac_cv_cpp_def_i386="no"))
if test "$ac_cv_cpp_def_i386" = "yes"
then
CFLAGS="$CFLAGS -D__i386__"
fi
dnl *** check for the need to define __sparc__
AC_CACHE_CHECK([whether we need to define __sparc__],ac_cv_cpp_def_sparc,
AC_EGREP_CPP(yes,[#if (defined(sparc) || defined(__sparc)) && !defined(__sparc__)
yes
#endif],
ac_cv_cpp_def_sparc="yes", ac_cv_cpp_def_sparc="no"))
if test "$ac_cv_cpp_def_sparc" = "yes"
then
CFLAGS="$CFLAGS -D__sparc__"
CXXFLAGS="$CXXFLAGS -D__sparc__"
fi
dnl *** check for the need to define __sun__
AC_CACHE_CHECK([whether we need to define __sun__],ac_cv_cpp_def_sun,
AC_EGREP_CPP(yes,[#if (defined(sun) || defined(__sun)) && !defined(__sun__)
yes
#endif],
ac_cv_cpp_def_sun="yes", ac_cv_cpp_def_sun="no"))
if test "$ac_cv_cpp_def_sun" = "yes"
then
CFLAGS="$CFLAGS -D__sun__"
CXXFLAGS="$CXXFLAGS -D__sun__"
fi
dnl *** check for the need to define __powerpc__
AC_CACHE_CHECK(whether we need to define __powerpc__,ac_cv_cpp_def_powerpc,
AC_EGREP_CPP(yes,[#if (defined(__ppc__) || defined(__PPC__) || defined(__POWERPC__)) && !defined(__powerpc__)
yes
#endif],
ac_cv_cpp_def_powerpc="yes", ac_cv_cpp_def_powerpc="no"))
if test "$ac_cv_cpp_def_powerpc" = "yes"
then
CFLAGS="$CFLAGS -D__powerpc__"
CXXFLAGS="$CXXFLAGS -D__powerpc__"
fi
dnl **** Test Winelib-related features of the C++ compiler
AC_LANG_CPLUSPLUS()
if test "x${GCC}" = "xyes"
then
OLDCXXFLAGS="$CXXFLAGS";
CXXFLAGS="-fpermissive";
AC_CACHE_CHECK([for g++ -fpermissive option], has_gxx_permissive,
AC_TRY_COMPILE(,[
for (int i=0;i<2;i++);
i=0;
],
[has_gxx_permissive="yes"],
[has_gxx_permissive="no"])
)
CXXFLAGS="-fms-extensions";
AC_CACHE_CHECK([for g++ -fms-extensions option], has_gxx_msextensions,
AC_TRY_COMPILE(,[
;
],
[has_gxx_msextensions="yes"],
[has_gxx_msextensions="no"])
)
CXXFLAGS="-fno-for-scope";
AC_CACHE_CHECK([for g++ -fno-for-scope option], has_gxx_no_for_scope,
AC_TRY_COMPILE(,[
for (int i=0;i<2;i++);
i=0;
],
[has_gxx_no_for_scope="yes"],
[has_gxx_no_for_scope="no"])
)
CXXFLAGS="-fshort-wchar";
AC_CACHE_CHECK([for g++ -fshort-wchar option], has_gxx_short_wchar,
AC_TRY_COMPILE(,[
;
],
[has_gxx_short_wchar="yes"],
[has_gxx_short_wchar="no"])
)
CXXFLAGS="$OLDCXXFLAGS";
if test "$has_gxx_permissive" = "yes"
then
CXXFLAGS="$CXXFLAGS -fpermissive"
fi
if test "$has_gxx_msextensions" = "yes"
then
CXXFLAGS="$CXXFLAGS -fms-extensions"
fi
if test "$has_gxx_no_for_scope" = "yes"
then
CXXFLAGS="$CXXFLAGS -fno-for-scope"
fi
if test "$has_gxx_short_wchar" = "yes"
then
CXXFLAGS="$CXXFLAGS -fshort-wchar"
fi
fi
AC_LANG_C()
dnl **** Test Winelib-related features of the C compiler
dnl none for now
dnl **** Macros for finding a headers/libraries in a collection of places
dnl AC_PATH_FILE(variable,file,action-if-not-found,default-locations)
AC_DEFUN(AC_PATH_FILE,[
AC_MSG_CHECKING([for $2])
AC_CACHE_VAL(ac_cv_pfile_$1,
[
ac_found=
ac_dummy="ifelse([$4], , , [$4])"
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
for ac_dir in $ac_dummy; do
IFS="$ac_save_ifs"
if test -z "$ac_dir"
then
ac_file="$2"
else
ac_file="$ac_dir/$2"
fi
if test -f "$ac_file"
then
ac_found=1
ac_cv_pfile_$1="$ac_dir"
break
fi
done
ifelse([$3],,,[if test -z "$ac_found"
then
$3
fi
])
])
$1="$ac_cv_pfile_$1"
if test -n "$ac_found" -o -n "[$]$1"
then
AC_MSG_RESULT([$]$1)
else
AC_MSG_RESULT(no)
fi
AC_SUBST($1)
])
dnl AC_PATH_HEADER(variable,header,action-if-not-found,default-locations)
dnl Note that the above may set variable to an empty value if the header is
dnl already in the include path
AC_DEFUN(AC_PATH_HEADER,[
AC_MSG_CHECKING([for $2 header])
AC_CACHE_VAL(ac_cv_pheader_$1,
[
ac_found=
ac_dummy="ifelse([$4], , :/usr/local/include, [$4])"
save_CPPFLAGS="$CPPFLAGS"
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
for ac_dir in $ac_dummy; do
IFS="$ac_save_ifs"
if test -z "$ac_dir"
then
CPPFLAGS="$save_CPPFLAGS"
else
CPPFLAGS="-I$ac_dir $save_CPPFLAGS"
fi
AC_TRY_COMPILE([#include <$2>],,ac_found=1;ac_cv_pheader_$1="$ac_dir";break)
done
CPPFLAGS="$save_CPPFLAGS"
ifelse([$3],,,[if test -z "$ac_found"
then
$3
fi
])
])
$1="$ac_cv_pheader_$1"
if test -n "$ac_found" -o -n "[$]$1"
then
AC_MSG_RESULT([$]$1)
else
AC_MSG_RESULT(no)
fi
AC_SUBST($1)
])
dnl AC_PATH_LIBRARY(variable,libraries,extra libs,action-if-not-found,default-locations)
AC_DEFUN(AC_PATH_LIBRARY,[
AC_MSG_CHECKING([for $2])
AC_CACHE_VAL(ac_cv_plibrary_$1,
[
ac_found=
ac_dummy="ifelse([$5], , :/usr/local/lib, [$5])"
save_LIBS="$LIBS"
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
for ac_dir in $ac_dummy; do
IFS="$ac_save_ifs"
if test -z "$ac_dir"
then
LIBS="$2 $3 $save_LIBS"
else
LIBS="-L$ac_dir $2 $3 $save_LIBS"
fi
AC_TRY_LINK(,,ac_found=1;ac_cv_plibrary_$1="$ac_dir";break)
done
LIBS="$save_LIBS"
ifelse([$4],,,[if test -z "$ac_found"
then
$4
fi
])
])
$1="$ac_cv_plibrary_$1"
if test -n "$ac_found" -o -n "[$]$1"
then
AC_MSG_RESULT([$]$1)
else
AC_MSG_RESULT(no)
fi
AC_SUBST($1)
])
dnl **** Try to find where winelib is located ****
LDPATH=""
WINE_INCLUDE_ROOT=""
WINE_INCLUDE_PATH=""
WINE_LIBRARY_ROOT=""
WINE_LIBRARY_PATH=""
WINE_DLL_ROOT=""
WINE_DLL_PATH=""
WINE_TOOL_PATH=""
WINE=""
WINEBUILD=""
WRC=""
AC_ARG_WITH(wine,
[ --with-wine=DIR the Wine package (or sources) is in DIR],
[if test "$withval" != "no"; then
WINE_ROOT="$withval";
WINE_INCLUDES="";
WINE_LIBRARIES="";
WINE_TOOLS="";
else
WINE_ROOT="";
fi])
if test -n "$WINE_ROOT"
then
WINE_INCLUDE_ROOT="$WINE_ROOT/include:$WINE_ROOT/include/wine:$WINE_ROOT/include/wine/windows:$WINE_ROOT/include/windows"
WINE_LIBRARY_ROOT="$WINE_ROOT:$WINE_ROOT/libs:$WINE_ROOT/lib"
WINE_DLL_ROOT="$WINE_ROOT/dlls:$WINE_ROOT/lib:$WINE_ROOT/lib/wine"
WINE_TOOL_PATH="$WINE_ROOT:$WINE_ROOT/bin:$WINE_ROOT/tools/wrc:$WINE_ROOT/tools/winebuild"
fi
AC_ARG_WITH(wine-includes,
[ --with-wine-includes=DIR the Wine includes are in DIR],
[if test "$withval" != "no"; then
WINE_INCLUDES="$withval";
else
WINE_INCLUDES="";
fi])
if test -n "$WINE_INCLUDES"
then
WINE_INCLUDE_ROOT="$WINE_INCLUDES"
fi
AC_ARG_WITH(wine-libraries,
[ --with-wine-libraries=DIR the Wine libraries are in DIR],
[if test "$withval" != "no"; then
WINE_LIBRARIES="$withval";
else
WINE_LIBRARIES="";
fi])
if test -n "$WINE_LIBRARIES"
then
WINE_LIBRARY_ROOT="$WINE_LIBRARIES"
fi
AC_ARG_WITH(wine-dlls,
[ --with-wine-dlls=DIR the Wine dlls are in DIR],
[if test "$withval" != "no"; then
WINE_DLLS="$withval";
else
WINE_DLLS="";
fi])
if test -n "$WINE_DLLS"
then
WINE_DLL_ROOT="$WINE_DLLS"
fi
AC_ARG_WITH(wine-tools,
[ --with-wine-tools=DIR the Wine tools are in DIR],
[if test "$withval" != "no"; then
WINE_TOOLS="$withval";
else
WINE_TOOLS="";
fi])
if test -n "$WINE_TOOLS"
then
WINE_TOOL_PATH="$WINE_TOOLS:$WINE_TOOLS/tools/wrc:$WINE_TOOLS/tools/winebuild"
fi
if test -z "$WINE_INCLUDE_ROOT"
then
WINE_INCLUDE_ROOT=":/usr/include/wine/windows:/usr/include/wine:/usr/local/include/wine/windows:/opt/wine/include/windows:/opt/wine/include/wine";
else
AC_PATH_FILE(WINE_INCLUDE_ROOT,[windef.h],[
AC_MSG_ERROR([Could not find the Wine headers (windef.h)])
],$WINE_INCLUDE_ROOT)
fi
AC_PATH_HEADER(WINE_INCLUDE_ROOT,[windef.h],[
AC_MSG_ERROR([Could not include the Wine headers (windef.h)])
],$WINE_INCLUDE_ROOT)
if test -n "$WINE_INCLUDE_ROOT"
then
WINE_INCLUDE_PATH="-I$WINE_INCLUDE_ROOT"
else
WINE_INCLUDE_PATH=""
fi
if test -z "$WINE_LIBRARY_ROOT"
then
WINE_LIBRARY_ROOT=":/usr/lib/wine:/usr/local/lib:/usr/local/lib/wine:/opt/wine/lib"
else
AC_PATH_FILE(WINE_LIBRARY_ROOT,[libwine.so],
[
AC_PATH_FILE(WINE_LIBRARY_ROOT,[libwine.dylib],
[AC_MSG_ERROR([Could not find the Wine libraries (libwine.dylib or libwine.so)])],
$WINE_LIBRARY_ROOT)
], $WINE_LIBRARY_ROOT)
fi
AC_PATH_LIBRARY(WINE_LIBRARY_ROOT,[-lwine],[],[
AC_MSG_ERROR([Could not link with the Wine libraries (libwine.so)])
],$WINE_LIBRARY_ROOT)
if test -n "$WINE_LIBRARY_ROOT"
then
WINE_LIBRARY_PATH="-L$WINE_LIBRARY_ROOT"
LDPATH="$WINE_LIBRARY_ROOT"
else
WINE_LIBRARY_PATH=""
fi
save_LIBS="$LIBS"
LIBS="$WINE_LIBRARY_PATH $LIBS"
AC_CHECK_LIB(wine_unicode,wine_cp_wcstombs,[],[
AC_MSG_ERROR([Could not find the Wine dlls (libwine_unicode.so)])
])
LIBS="$save_LIBS"
if test -z "$WINE_DLL_ROOT"
then
if test -n "$WINE_LIBRARY_ROOT"
then
WINE_DLL_ROOT="$WINE_LIBRARY_ROOT:$WINE_LIBRARY_ROOT/dlls:$WINE_LIBRARY_ROOT/wine"
else
WINE_DLL_ROOT="/lib:/lib/wine:/usr/lib:/usr/lib/wine:/usr/local/lib:/usr/local/lib/wine"
fi
fi
AC_PATH_FILE(WINE_DLL_ROOT,[libntdll.def],[
AC_MSG_ERROR([Could not find the Wine dlls (libntdll.def)])
],[$WINE_DLL_ROOT])
WINE_DLL_PATH="-L$WINE_DLL_ROOT"
WINE_LIBRARY_PATH="$WINE_LIBRARY_PATH -L$WINE_DLL_ROOT"
if test -z "$WINE_TOOL_PATH"
then
WINE_TOOL_PATH="$PATH:/usr/local/bin:/opt/wine/bin"
fi
AC_PATH_PROG(WINE,wine,,$WINE_TOOL_PATH)
if test -z "$WINE"
then
AC_MSG_ERROR([Could not find Wine's wine tool])
fi
AC_PATH_PROG(WINEBUILD,winebuild,,$WINE_TOOL_PATH)
if test -z "$WINEBUILD"
then
AC_MSG_ERROR([Could not find Wine's winebuild tool])
fi
AC_PATH_PROG(WRC,wrc,,$WINE_TOOL_PATH)
if test -z "$WRC"
then
AC_MSG_ERROR([Could not find Wine's wrc tool])
fi
case $build_os in
darwin*|macosx*)
LDPATH="DYLD_LIBRARY_PATH=\"$LDPATH:\$\$DYLD_LIBRARY_PATH\"";;
*)
LDPATH="LD_LIBRARY_PATH=\"$LDPATH:\$\$LD_LIBRARY_PATH\""
esac
AC_SUBST(LDPATH)
AC_SUBST(WINE_INCLUDE_PATH)
AC_SUBST(WINE_LIBRARY_PATH)
AC_SUBST(WINE_DLL_PATH)
dnl **** Try to find where the MFC are located ****
AC_LANG_CPLUSPLUS()
if test "x$NEEDS_MFC" = "x1"
then
ATL_INCLUDE_ROOT="";
ATL_INCLUDE_PATH="";
MFC_INCLUDE_ROOT="";
MFC_INCLUDE_PATH="";
MFC_LIBRARY_ROOT="";
MFC_LIBRARY_PATH="";
AC_ARG_WITH(mfc,
[ --with-mfc=DIR the MFC package (or sources) is in DIR],
[if test "$withval" != "no"; then
MFC_ROOT="$withval";
ATL_INCLUDES="";
MFC_INCLUDES="";
MFC_LIBRARIES="";
else
MFC_ROOT="";
fi])
if test -n "$MFC_ROOT"
then
ATL_INCLUDE_ROOT="$MFC_ROOT";
MFC_INCLUDE_ROOT="$MFC_ROOT";
MFC_LIBRARY_ROOT="$MFC_ROOT";
fi
AC_ARG_WITH(atl-includes,
[ --with-atl-includes=DIR the ATL includes are in DIR],
[if test "$withval" != "no"; then
ATL_INCLUDES="$withval";
else
ATL_INCLUDES="";
fi])
if test -n "$ATL_INCLUDES"
then
ATL_INCLUDE_ROOT="$ATL_INCLUDES";
fi
AC_ARG_WITH(mfc-includes,
[ --with-mfc-includes=DIR the MFC includes are in DIR],
[if test "$withval" != "no"; then
MFC_INCLUDES="$withval";
else
MFC_INCLUDES="";
fi])
if test -n "$MFC_INCLUDES"
then
MFC_INCLUDE_ROOT="$MFC_INCLUDES";
fi
AC_ARG_WITH(mfc-libraries,
[ --with-mfc-libraries=DIR the MFC libraries are in DIR],
[if test "$withval" != "no"; then
MFC_LIBRARIES="$withval";
else
MFC_LIBRARIES="";
fi])
if test -n "$MFC_LIBRARIES"
then
MFC_LIBRARY_ROOT="$MFC_LIBRARIES";
fi
OLDCPPFLAGS="$CPPFLAGS"
dnl FIXME: We should not have defines in any of the include paths
CPPFLAGS="$WINE_INCLUDE_PATH -I$WINE_INCLUDE_ROOT/msvcrt -D_DLL -D_MT $CPPFLAGS"
ATL_INCLUDE_PATH="-I\$(WINE_INCLUDE_ROOT)/msvcrt -D_DLL -D_MT"
if test -z "$ATL_INCLUDE_ROOT"
then
ATL_INCLUDE_ROOT=":$WINE_INCLUDE_ROOT/atl:/usr/include/atl:/usr/local/include/atl:/opt/mfc/include/atl:/opt/atl/include"
else
ATL_INCLUDE_ROOT="$ATL_INCLUDE_ROOT:$ATL_INCLUDE_ROOT/atl:$ATL_INCLUDE_ROOT/atl/include"
fi
AC_PATH_HEADER(ATL_INCLUDE_ROOT,atldef.h,[
AC_MSG_ERROR([Could not find the ATL includes])
],$ATL_INCLUDE_ROOT)
if test -n "$ATL_INCLUDE_ROOT"
then
ATL_INCLUDE_PATH="$ATL_INCLUDE_PATH -I$ATL_INCLUDE_ROOT"
fi
MFC_INCLUDE_PATH="$ATL_INCLUDE_PATH"
if test -z "$MFC_INCLUDE_ROOT"
then
MFC_INCLUDE_ROOT=":$WINE_INCLUDE_ROOT/mfc:/usr/include/mfc:/usr/local/include/mfc:/opt/mfc/include/mfc:/opt/mfc/include"
else
MFC_INCLUDE_ROOT="$MFC_INCLUDE_ROOT:$MFC_INCLUDE_ROOT/mfc:$MFC_INCLUDE_ROOT/mfc/include:$MFC_INCLUDE_ROOT/Include"
fi
AC_PATH_HEADER(MFC_INCLUDE_ROOT,afx.h,[
AC_MSG_ERROR([Could not find the MFC includes])
],$MFC_INCLUDE_ROOT)
if test -n "$MFC_INCLUDE_ROOT" -a "$ATL_INCLUDE_ROOT" != "$MFC_INCLUDE_ROOT"
then
MFC_INCLUDE_PATH="$MFC_INCLUDE_PATH -I$MFC_INCLUDE_ROOT"
fi
CPPFLAGS="$OLDCPPFLAGS"
if test -z "$MFC_LIBRARY_ROOT"
then
MFC_LIBRARY_ROOT=":$WINE_LIBRARY_ROOT:/usr/lib/mfc:/usr/local/lib:/usr/local/lib/mfc:/opt/mfc/lib";
else
MFC_LIBRARY_ROOT="$MFC_LIBRARY_ROOT:$MFC_LIBRARY_ROOT/lib:$MFC_LIBRARY_ROOT/mfc/src:$MFC_LIBRARY_ROOT/src";
fi
AC_PATH_LIBRARY(MFC_LIBRARY_ROOT,[-lmfc],[$WINE_LIBRARY_PATH -lwine -lwine_unicode],[
AC_MSG_ERROR([Could not find the MFC library])
],$MFC_LIBRARY_ROOT)
if test -n "$MFC_LIBRARY_ROOT" -a "$MFC_LIBRARY_ROOT" != "$WINE_LIBRARY_ROOT"
then
MFC_LIBRARY_PATH="-L$MFC_LIBRARY_ROOT"
else
MFC_LIBRARY_PATH=""
fi
AC_SUBST(ATL_INCLUDE_PATH)
AC_SUBST(MFC_INCLUDE_PATH)
AC_SUBST(MFC_LIBRARY_PATH)
fi
AC_LANG_C()
dnl **** Generate output files ****
MAKE_RULES=Make.rules
AC_SUBST_FILE(MAKE_RULES)
AC_OUTPUT([
Make.rules
##WINEMAKER_PROJECTS##
])
echo
echo "Configure finished. Do 'make' to build the project."
echo
dnl Local Variables:
dnl comment-start: "dnl "
dnl comment-end: ""
dnl comment-start-skip: "\\bdnl\\b\\s *"
dnl compile-command: "autoconf"
dnl End:
--- Make.rules.in ---
# Copyright 2000 Francois Gouget for CodeWeavers
# fgouget@codeweavers.com
#
# Global rules shared by all makefiles -*-Makefile-*-
#
# Each individual makefile must define the following variables:
# TOPOBJDIR : top-level object directory
# SRCDIR : source directory for this module
#
# Each individual makefile may define the following additional variables:
#
# SUBDIRS : subdirectories that contain a Makefile
# DLLS : WineLib libraries to be built
# EXES : WineLib executables to be built
#
# CEXTRA : extra c flags (e.g. '-Wall')
# CXXEXTRA : extra c++ flags (e.g. '-Wall')
# WRCEXTRA : extra wrc flags (e.g. '-p _SysRes')
# DEFINES : defines (e.g. -DSTRICT)
# INCLUDE_PATH : additional include path
# LIBRARY_PATH : additional library path
# LIBRARIES : additional Unix libraries to link with
#
# C_SRCS : C sources for the module
# CXX_SRCS : C++ sources for the module
# RC_SRCS : resource source files
# SPEC_SRCS : interface definition files
# Where is Wine
WINE_INCLUDE_ROOT = @WINE_INCLUDE_ROOT@
WINE_INCLUDE_PATH = @WINE_INCLUDE_PATH@
WINE_LIBRARY_ROOT = @WINE_LIBRARY_ROOT@
WINE_LIBRARY_PATH = @WINE_LIBRARY_PATH@
WINE_DLL_ROOT = @WINE_DLL_ROOT@
WINE_DLL_PATH = @WINE_DLL_PATH@
LDPATH = @LDPATH@
# Where are the MFC
ATL_INCLUDE_ROOT = @ATL_INCLUDE_ROOT@
ATL_INCLUDE_PATH = @ATL_INCLUDE_PATH@
MFC_INCLUDE_ROOT = @MFC_INCLUDE_ROOT@
MFC_INCLUDE_PATH = @MFC_INCLUDE_PATH@
MFC_LIBRARY_ROOT = @MFC_LIBRARY_ROOT@
MFC_LIBRARY_PATH = @MFC_LIBRARY_PATH@
# Global definitions and options
GLOBAL_DEFINES = ##WINEMAKER_DEFINES##
GLOBAL_INCLUDE_PATH = ##WINEMAKER_INCLUDE_PATH##
GLOBAL_DLL_PATH = ##WINEMAKER_DLL_PATH##
GLOBAL_DLLS = ##WINEMAKER_DLLS##
GLOBAL_LIBRARY_PATH = ##WINEMAKER_LIBRARY_PATH##
GLOBAL_LIBRARIES = ##WINEMAKER_LIBRARIES##
# First some useful definitions
SHELL = /bin/sh
CC = @CC@
CPP = @CPP@
CXX = @CXX@
WRC = @WRC@
CFLAGS = @CFLAGS@ $(CEXTRA)
CXXFLAGS = @CXXFLAGS@ $(CXXEXTRA)
WRCFLAGS = $(WRCEXTRA)
OPTIONS = @OPTIONS@ -D_REENTRANT
LIBS = @LIBS@ $(LIBRARY_PATH)
DIVINCL = $(GLOBAL_INCLUDE_PATH) -I$(SRCDIR) $(INCLUDE_PATH) $(WINE_INCLUDE_PATH)
ALLCFLAGS = $(DIVINCL) $(CFLAGS) $(GLOBAL_DEFINES) $(DEFINES) $(OPTIONS)
ALLCXXFLAGS=$(DIVINCL) $(CXXFLAGS) $(GLOBAL_DEFINES) $(DEFINES) $(OPTIONS)
ALL_DLL_PATH = $(DLL_PATH) $(GLOBAL_DLL_PATH) $(WINE_DLL_PATH)
ALL_LIBRARY_PATH = $(LIBRARY_PATH) $(GLOBAL_LIBRARY_PATH) $(WINE_LIBRARY_PATH)
WINE_LIBRARIES = -lwine -lwine_unicode
ALL_LIBRARIES = $(LIBRARIES:%=-l%) $(GLOBAL_LIBRARIES:%=-l%) $(WINE_LIBRARIES)
LDSHARED = @LDSHARED@
LDXXSHARED= @LDXXSHARED@
LDDLLFLAGS= @LDDLLFLAGS@
LN_S = @LN_S@
RM = rm -f
MV = mv
MKDIR = mkdir -p
WINE = @WINE@
WINEBUILD = @WINEBUILD@
@SET_MAKE@
# Installation infos
INSTALL = install
INSTALL_PROGRAM = $(INSTALL)
INSTALL_SCRIPT = $(INSTALL)
INSTALL_DATA = $(INSTALL) -m 644
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
dlldir = @libdir@/wine
prog_manext = 1
conf_manext = 5
OBJS = $(C_SRCS:.c=.o) $(CXX_SRCS:.cpp=.o) \
$(SPEC_SRCS:.spec=.spec.o)
CLEAN_FILES = *.dbg.c *.spec.c y.tab.c y.tab.h lex.yy.c \
core *.orig *.rej \
\\\#*\\\# *~ *% .\\\#*
# Implicit rules
.SUFFIXES: .cpp .rc .res .spec .spec.c .spec.o
.c.o:
$(CC) -c $(ALLCFLAGS) -o $@ $<
.cpp.o:
$(CXX) -c $(ALLCXXFLAGS) -o $@ $<
.cxx.o:
$(CXX) -c $(ALLCXXFLAGS) -o $@ $<
.rc.res:
$(LDPATH) $(WRC) $(WRCFLAGS) $(DIVINCL) -o $@ $<
.PHONY: all install uninstall clean distclean depend dummy
# 'all' target first in case the enclosing Makefile didn't define any target
all: Makefile
# Rules for makefile
Makefile: Makefile.in $(TOPSRCDIR)/configure
@echo $@ is older than $?, please rerun $(TOPSRCDIR)/configure
@exit 1
# Rules for cleaning
$(SUBDIRS:%=%/__clean__): dummy
cd `dirname $@` && $(MAKE) clean
$(EXTRASUBDIRS:%=%/__clean__): dummy
-cd `dirname $@` && $(RM) $(CLEAN_FILES)
clean:: $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__)
$(RM) $(CLEAN_FILES) $(RC_SRCS:.rc=.res) $(OBJS)
$(RM) $(DLLS:%=%.dbg.o) $(DLLS:%=%.spec.o) $(DLLS:%=%.so)
$(RM) $(EXES:%=%.dbg.o) $(EXES:%=%.spec.o) $(EXES:%=%.so) $(EXES:%.exe=%)
# Rules for installing
$(SUBDIRS:%=%/__install__): dummy
cd `dirname $@` && $(MAKE) install
$(SUBDIRS:%=%/__uninstall__): dummy
cd `dirname $@` && $(MAKE) uninstall
# Misc. rules
$(SUBDIRS): dummy
@cd $@ && $(MAKE)
dummy:
# End of global rules
--- wineapploader.in ---
#!/bin/sh
#
# Wrapper script to start a Winelib application once it is installed
#
# Copyright (C) 2002 Alexandre Julliard
# determine the app Winelib library name
appname=`basename "$0" .exe`.exe
#allow Wine to load Winelib application from the current directory
export WINEDLLPATH=$WINEDLLPATH:@winelibdir@
# first try explicit WINELOADER
if [ -x "$WINELOADER" ]; then exec "$WINELOADER" "$appname" "$@"; fi
# then default bin directory
if [ -x "@bindir@/wine" ]; then exec "@bindir@/wine" "$appname" "$@"; fi
# now try the directory containing $0
appdir=""
case "$0" in
*/*)
# $0 contains a path, use it
appdir=`dirname "$0"`
;;
*)
# no directory in $0, search in PATH
saved_ifs=$IFS
IFS=:
for d in $PATH
do
IFS=$saved_ifs
if [ -x "$d/$0" ]; then appdir="$d"; break; fi
done
;;
esac
if [ -x "$appdir/wine" ]; then exec "$appdir/wine" "$appname" "$@"; fi
# finally look in PATH
exec wine "$appname" "$@"
--- wrapper.c ---
/*
* Copyright 2000 Francois Gouget <fgouget@codeweavers.com> for CodeWeavers
*/
#ifndef STRICT
#define STRICT
#endif
#include <dlfcn.h>
#include <windows.h>
/*
* Describe the wrapped application
*/
/**
* This is either CUIEXE for a console based application or
* GUIEXE for a regular windows application.
*/
#define GUIEXE 0
#define CUIEXE 1
#define APP_TYPE ##WINEMAKER_APP_TYPE##
/**
* This is the name of the library containing the application,
* e.g. 'hello.dll' if the application is called 'hello.exe'.
*/
static char* appName = "##WINEMAKER_APP_NAME##";
/**
* This is the name of the application's Windows module. If left NULL
* then appName is used.
*/
static char* appModule = NULL;
/**
* This is the application's entry point. This is usually "WinMain" for a
* GUIEXE and 'main' for a CUIEXE application.
*/
static char* appInit = ##WINEMAKER_APP_INIT##;
/**
* This is either non-NULL for MFC-based applications and is the name of the
* MFC's module. This is the module in which we will take the 'WinMain'
* function.
*/
static char* mfcModule = ##WINEMAKER_APP_MFC##;
/*
* Implement the main.
*/
#if APP_TYPE == GUIEXE
typedef int WINAPI (*WinMainFunc)(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow);
#else
typedef int WINAPI (*MainFunc)(int argc, char** argv, char** envp);
#endif
#if APP_TYPE == GUIEXE
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
#else
int WINAPI main(int argc, char** argv, char** envp)
#endif
{
HINSTANCE hApp = 0, hMFC = 0, hMain = 0;
void* appMain;
int retcode;
/* Then if this application is MFC based, load the MFC module */
/* FIXME: I'm not sure this is really necessary */
if (mfcModule!=NULL) {
hMFC=LoadLibrary(mfcModule);
if (hMFC==NULL) {
char format[]="Could not load the MFC module %s (%d)";
char* msg;
msg=(char*)malloc(strlen(format)+strlen(mfcModule)+11);
sprintf(msg,format,mfcModule,GetLastError());
MessageBox(NULL,msg,"LoadLibrary error",MB_OK);
free(msg);
return 1;
}
/* MFC is a special case: the WinMain is in the MFC library,
* instead of the application's library.
*/
hMain=hMFC;
} else {
hMFC=NULL;
}
/* Load the application's module */
if (appModule==NULL) {
appModule=appName;
}
hApp=LoadLibrary(appModule);
if (hApp==NULL) {
char format[]="Could not load the application's module %s (%d)";
char* msg;
msg=(char*)malloc(strlen(format)+strlen(appModule)+11);
sprintf(msg,format,appModule,GetLastError());
MessageBox(NULL,msg,"LoadLibrary error",MB_OK);
free(msg);
return 1;
} else if (hMain==NULL) {
hMain=hApp;
}
/* Get the address of the application's entry point */
appMain=GetProcAddress(hMain, appInit);
if (appMain==NULL) {
char format[]="Could not get the address of %s (%d)";
char* msg;
msg=(char*)malloc(strlen(format)+strlen(appInit)+11);
sprintf(msg,format,appInit,GetLastError());
MessageBox(NULL,msg,"GetProcAddress error",MB_OK);
free(msg);
return 1;
}
/* And finally invoke the application's entry point */
#if APP_TYPE == GUIEXE
retcode=(*((WinMainFunc)appMain))(hApp,hPrevInstance,szCmdLine,iCmdShow);
#else
retcode=(*((MainFunc)appMain))(argc,argv,envp);
#endif
/* Cleanup and done */
FreeLibrary(hApp);
if (hMFC!=NULL) {
FreeLibrary(hMFC);
}
return retcode;
}
......@@ -13,7 +13,7 @@ winemaker \- generate a build infrastructure for compiling Windows programs on U
]
.br
[
.IR "--lower-include " "| " "--nolower-include "
.IR "--lower-include " "| " "--nolower-include " ] [ " "--mfc " "| " "--nomfc "
]
.br
[
......@@ -21,10 +21,6 @@ winemaker \- generate a build infrastructure for compiling Windows programs on U
]
.br
[
.IR "--wrap " "| " "--nowrap " "] [ " "--mfc " "| " "--nomfc "
]
.br
[
.IR "-Dmacro[=defn] " "] [ " "-Idir " "] [ " "-Ldir " "] [ " "-idll" "] [ " "-llibrary "
]
.br
......@@ -33,7 +29,7 @@ winemaker \- generate a build infrastructure for compiling Windows programs on U
]
.br
[
.IR "--generated-files " "] [ " "--nogenerated-files " "] [ " "--nogenerated-specs "
.IR "--generated-files " "] [ " "--nogenerated-files " "]
]
.SH DESCRIPTION
......@@ -129,20 +125,9 @@ The standard set of libraries is: advapi32.dll, comdlg32.dll, gdi32.dll,
kernel32.dll, odbc32.dll, ole32.dll, oleaut32.dll, shell32.dll, user32.dll,
winspool.drv.
.TP
.I --wrap
Specifies that executable targets should be built as libraries and a small
executable wrapper generated for them. This technique is sometimes required
to solve initialization problems occurring on the application startup.
.TP
.I --nowrap
Specifies that no wrapper should be generated for executable targets. This is
the default.
.TP
.I --mfc
Specifies that the targets are MFC based. In such a case winemaker generates a
configure script with MFC specific options, modifies the include and
library paths accordingly, links the target with the MFC library and
generates wrappers for these targets that are executables.
Specifies that the targets are MFC based. In such a case winemaker the include
and library paths accordingly, and links the target with the MFC library.
.TP
.I --nomfc
Specifies that targets are not MFC-based. This option disables use of MFC libraries
......@@ -173,17 +158,10 @@ target specific options.
Specifies that there is only one target, and that it is called "name".
.TP
.I --generated-files
Tells winemaker to generate the build infrastructure files, i.e. the spec
files, the wrapper files, the Makefile.in files, the Make.rules.in file, the
configure.in file and the configure script. This is the default.
Tells winemaker to generate the build the Makefile. This is the default.
.TP
.I --nogenerated-files
Tells winemaker not to generate any of the above files.
.TP
.I --nogenerated-specs
Tells winemaker not to generate the spec files when generating files. This is
particularly useful when using winemaker to generate a build environment and
you already have a spec file.
Tells winemaker not to generate the Makefile.
.SH EXAMPLES
.PP
......@@ -240,9 +218,6 @@ exports (for libraries). We could then restore all these settings for the
corresponding Winelib target. The problem is that we should have such a tool
available under the Wine license first.
.PP
The wrapper code should be generic, i.e. you should be able to have just one
wrapper and specify which library to load using an option.
.PP
Furthermore it is not very good at finding the library containing the
executable: it must either be in the current directory or in the
.IR LD_LIBRARY_PATH .
......
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