Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
905658c4
Commit
905658c4
authored
Feb 27, 2004
by
Dimitrie O. Paun
Committed by
Alexandre Julliard
Feb 27, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Generate a simple Makefile that uses winegcc to compile.
No longer generate a configure script, that's project policy.
parent
0d203bd7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
1512 deletions
+46
-1512
winemaker
tools/winemaker
+40
-1481
winemaker.man
tools/winemaker.man
+6
-31
No files found.
tools/winemaker
View file @
905658c4
...
...
@@ -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 user
32 winspool)
;
my
@std_imports
=
qw(
odbc32 ole32 oleaut
32 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}_DEPEND
S)\n"
;
print
FILEO
"\$(${canon}_MODULE).so: \$(${canon}_MODULE).dbg.o \$(${canon}_
OBJ
S)\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
;
}
tools/winemaker.man
View file @
905658c4
...
...
@@ -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 .
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment