diff --git a/dtool/Package.pp b/dtool/Package.pp index b72fe5c126..c7c65ea7cb 100644 --- a/dtool/Package.pp +++ b/dtool/Package.pp @@ -13,8 +13,8 @@ // files. // Check the version of ppremake in use. -#if $[< $[PPREMAKE_VERSION],1.1] - #error You need at least ppremake version 1.1 to process this tree. +#if $[< $[PPREMAKE_VERSION],1.11] + #error You need at least ppremake version 1.11 to process this tree. #endif // What is the name and version of this source tree? diff --git a/dtool/pptempl/Depends.pp b/dtool/pptempl/Depends.pp index 2176afe3a4..6a82045bd1 100644 --- a/dtool/pptempl/Depends.pp +++ b/dtool/pptempl/Depends.pp @@ -48,6 +48,11 @@ #define active_component_libs $[active_component_libs] #define active_libs $[active_libs] #define get_sources $[get_sources] + #define get_igatescan $[get_igatescan] + #define get_igateoutput $[get_igateoutput] + #define get_igatedb $[get_igatedb] + #define get_igatemscan $[get_igatemscan] + #define get_igatemout $[get_igatemout] // Report a warning for nonexisting dependencies. #define nonexisting $[unmapped all_libs,$[LOCAL_LIBS]] @@ -62,6 +67,12 @@ #define cxx_sources $[filter-out %_src.cxx,$[filter %.cxx,$[get_sources]]] #define yxx_sources $[filter %.yxx,$[get_sources]] #define lxx_sources $[filter %.lxx,$[get_sources]] + + // Define what the object files are. + #foreach file $[c_sources] $[cxx_sources] $[yxx_sources] $[lxx_sources] + #define $[file]_obj $[patsubst %.c %.cxx %.yxx %.lxx,$[st_dir]/$[TARGET]_%.obj,$[file]] + #end file + #if $[USE_SINGLE_COMPOSITE_SOURCEFILE] #if $[> $[words $[cxx_sources]], 1] // If we have multiple C++ files, put them together into one @@ -70,6 +81,7 @@ #set composite_list $[composite_list] $[composite_file] #define $[composite_file]_sources $[cxx_sources] #push 1 $[composite_file]_sources + #define $[composite_file]_obj $[st_dir]/$[TARGET]_composite.obj #set cxx_sources $[composite_file] #endif #if $[> $[words $[c_sources]], 1] @@ -79,19 +91,36 @@ #set composite_list $[composite_list] $[composite_file] #define $[composite_file]_sources $[c_sources] #push 1 $[composite_file]_sources + #define $[composite_file]_obj $[st_dir]/$[TARGET]_composite_c.obj #set c_sources $[composite_file] #endif #endif - // Add the bison- and flex-generated .cxx files to the compile - // list, too. These never get added to composite files, though, - // mainly because they tend to be very large files themselves. + // Add the bison- and flex-generated .cxx files, as well as the + // interrogate-generated files, to the compile list, too. These + // never get added to composite files, though, mainly because they + // tend to be very large files themselves. #foreach source_file $[yxx_sources] $[lxx_sources] #define generated_file $[patsubst %.yxx %.lxx,%.cxx,$[source_file]] + #define $[generated_file]_obj $[patsubst %.yxx %.lxx,$[st_dir]/$[TARGET]_%.obj,$[source_file]] #define $[generated_file]_sources $[source_file] #set cxx_sources $[cxx_sources] $[generated_file] #end source_file - #define compile_sources $[c_sources] $[cxx_sources] $[yxx_sources] $[lxx_sources] + #if $[get_igateoutput] + #define generated_file $[get_igateoutput] + #define $[generated_file]_obj $[get_igateoutput:%.cxx=%.obj] + #define $[generated_file]_sources $[get_igatescan] + #set cxx_sources $[cxx_sources] $[generated_file] + #endif + #if $[get_igatemout] + #define generated_file $[get_igatemout] + #define $[generated_file]_obj $[get_igatemout:%.cxx=%.obj] + #define $[generated_file]_sources none + #set cxx_sources $[cxx_sources] $[generated_file] + #endif + + #define compile_sources $[c_sources] $[cxx_sources] + #end metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target // Allow the user to define additional EXTRA_DEPENDS targets in each diff --git a/dtool/pptempl/Global.gmsvc.pp b/dtool/pptempl/Global.gmsvc.pp index 474fb2fc06..02cf898087 100644 --- a/dtool/pptempl/Global.gmsvc.pp +++ b/dtool/pptempl/Global.gmsvc.pp @@ -38,11 +38,7 @@ #defun decygwin frompat,topat,path #foreach file $[path] - #if $[isfullpath $[file]] - $[patsubstw $[frompat],$[topat],$[cygpath_w $[file]]] - #else - $[patsubstw $[frompat],$[topat],$[osfilename $[file]]] - #endif + $[patsubstw $[frompat],$[topat],$[osfilename $[file]]] #end file #end decygwin @@ -157,18 +153,11 @@ #defer extra_cflags /EHsc /Zm250 /DWIN32_VC /DWIN32 $[WARNING_LEVEL_FLAG] $[END_CFLAGS] #defer DECYGWINED_INC_PATHLIST_ARGS $[decygwin %,/I"%",$[EXTRA_INCPATH] $[ipath] $[WIN32_PLATFORMSDK_INCPATH]] -#defer MAIN_C_COMPILE_ARGS /nologo /c $[DECYGWINED_INC_PATHLIST_ARGS] $[flags] $[extra_cflags] $[source] +#defer MAIN_C_COMPILE_ARGS /nologo /c $[DECYGWINED_INC_PATHLIST_ARGS] $[flags] $[extra_cflags] "$[osfilename $[source]]" #defer COMPILE_C $[COMPILER] /Fo"$[osfilename $[target]]" $[MAIN_C_COMPILE_ARGS] #defer COMPILE_C++ $[COMPILE_C] -#if $[DO_PCH] -#defer MAIN_C_COMPILE_ARGS_PCH /Fp"$[osfilename $[target_pch]]" $[MAIN_C_COMPILE_ARGS] -#defer COMPILE_C_WITH_PCH $[COMPILER] /Yu /Fo"$[osfilename $[target]]" $[MAIN_C_COMPILE_ARGS_PCH] -#defer COMPILE_CSTYLE_PCH $[COMPILER] /TC /Yc /Fo"$[osfilename $[target_obj]]" $[MAIN_C_COMPILE_ARGS_PCH] -#defer COMPILE_CXXSTYLE_PCH $[COMPILER] /TP /Yc /Fo"$[osfilename $[target_obj]]" $[MAIN_C_COMPILE_ARGS_PCH] -#endif - #defer STATIC_LIB_C $[LIBBER] /nologo $[sources] /OUT:"$[osfilename $[target]]" #defer STATIC_LIB_C++ $[STATIC_LIB_C] diff --git a/dtool/pptempl/Global.pp b/dtool/pptempl/Global.pp index d9cc9bffa6..5d0e8b5ef7 100644 --- a/dtool/pptempl/Global.pp +++ b/dtool/pptempl/Global.pp @@ -313,14 +313,14 @@ // the target is not to be interrogated. #defer get_igateoutput \ $[if $[and $[run_interrogate],$[IGATESCAN]], \ - lib$[TARGET]_igate.cxx] + $[st_dir]/lib$[TARGET]_igate.cxx] -// This variable returns the name of the interrogate module, if the -// current metalib target should include one, or empty string if it -// should not. -#defer get_igatemscan \ - $[if $[and $[run_interrogate],$[components $[IGATESCAN],$[active_component_libs]]], \ - $[TARGET]] +// This variable is the set of .in files generated by all of our +// component libraries. If it is nonempty, then we do need to +// generate a module, and $[get_igatemout] is the name of the .cxx file +// that interrogate will produce to make this module. +#defer get_igatemscan $[components $[get_igatedb:%=$[RELDIR]/%],$[active_component_libs]] +#defer get_igatemout $[if $[get_igatemscan],$[st_dir]/lib$[TARGET]_module.cxx] // This variable returns the set of external packages used by this // target, and by all the components shared by this target. @@ -397,6 +397,19 @@ #endif #end get_ld +// This function determines the set of files a given source file +// depends on. It is based on the setting of the $[filename]_sources +// variable to indicate the sources for composite files, etc. +#defun get_depends source + #if $[$[source]_sources] + #if $[ne $[$[source]_sources],none] + $[dependencies $[$[source]_sources]] + #endif + #else + $[dependencies $[source]] + #endif +#end get_depends + // This function determines the set of libraries our various targets // depend on. This is a complicated definition. It is the union of diff --git a/dtool/pptempl/Template.gmsvc.pp b/dtool/pptempl/Template.gmsvc.pp index 46681d3ced..1520f9322a 100644 --- a/dtool/pptempl/Template.gmsvc.pp +++ b/dtool/pptempl/Template.gmsvc.pp @@ -23,19 +23,9 @@ // $DTOOL/pptempl/Depends.pp, once for each Sources.pp file // Template.gmsvc.pp (this file), once for each Sources.pp file -#defun decygwin frompat,topat,path - #foreach file $[path] - #if $[isfullpath $[file]] - $[patsubstw $[frompat],$[topat],$[cygpath_w $[file]]] - #else - $[patsubstw $[frompat],$[topat],$[osfilename $[file]]] - #endif - #end file -#end decygwin - #if $[ne $[DTOOL],] #define dtool_ver_dir_cyg $[DTOOL]/src/dtoolbase -#define dtool_ver_dir $[decygwin %,%,$[dtool_ver_dir_cyg]] +#define dtool_ver_dir $[osfilename $[dtool_ver_dir_cyg]] #endif ////////////////////////////////////////////////////////////////////// @@ -57,7 +47,7 @@ // This library is on a metalib, so we can't build it, but we // should build all the obj's that go into it. #set deferred_objs $[deferred_objs] \ - $[patsubst %.c %.cxx,$[so_dir]/%.obj,%,,$[c_sources] $[cxx_sources] $[get_igateoutput]] + $[patsubst %,$[%_obj],$[compile_sources]] #endif #end lib_target @@ -67,7 +57,7 @@ // $[bin_targets] the list of binaries. $[test_bin_targets] is the // list of binaries that are to be built only when specifically asked // for. - #define lib_targets $[patsubst %,$[so_dir]/lib%$[dllext].$[dlllib],$[active_target(metalib_target noinst_lib_target)] $[real_lib_targets]] + #define lib_targets $[patsubst %,$[st_dir]/lib%$[dllext].$[dlllib],$[active_target(metalib_target noinst_lib_target)] $[real_lib_targets]] #define static_lib_targets $[active_target(static_lib_target ss_lib_target):%=$[st_dir]/lib%$[dllext].lib] #define bin_targets \ $[active_target(bin_target noinst_bin_target):%=$[st_dir]/%.exe] \ @@ -126,7 +116,7 @@ // $[complete_lpath] is rather like $[complete_ipath]: the list of // directories (from within this tree) we should add to our -L list. -#defer complete_lpath $[static_libs $[RELDIR:%=%/$[st_dir]],$[actual_local_libs]] $[dynamic_libs $[RELDIR:%=%/$[so_dir]],$[actual_local_libs]] +#defer complete_lpath $[static_libs $[RELDIR:%=%/$[st_dir]],$[actual_local_libs]] $[dynamic_libs $[RELDIR:%=%/$[st_dir]],$[actual_local_libs]] // $[lpath] is like $[target_ipath]: it's the list of directories we // should add to our -L list, from the context of a particular target. @@ -137,7 +127,7 @@ // This is the set of files we might copy into *.prebuilt, if we have // bison and flex (or copy from *.prebuilt if we don't have them). -#define bison_prebuilt $[patsubst %.yxx,%.h,$[yxx_st_sources]] $[patsubst %.yxx,%.cxx,$[yxx_st_sources]] $[patsubst %.lxx,%.cxx,$[lxx_st_sources]] +#define bison_prebuilt $[patsubst %.yxx,%.cxx %.h,$[yxx_st_sources]] $[patsubst %.lxx,%.cxx,$[lxx_st_sources]] // Pre-compiled headers are one way to speed the compilation of many // C++ source files that include similar headers, but it turns out a @@ -187,21 +177,20 @@ all : $[all_targets] // The 'test' rule makes all the test_bin_targets. test : $[test_bin_targets] -// We implement 'clean' simply by removing the odirs, since all of our -// generated output ends up in one or the other of these. Effective. -// It does assume that the odirs are not '.', however. clean : #if $[st_sources] -$[TAB] rm -rf $[st_dir] +$[TAB] rm -f $[st_dir]/* #endif $[TAB] rm -f *.pyc *.pyo // Also scrub out old generated Python code. -// 'cleanall' is not much more thorough than 'clean': At the moment, -// it also cleans up the bison and flex output, as well as the -// dependency cache file. +// 'cleanall' is intended to undo all the effects of running ppremake +// and building. It removes everything except the Makefile. cleanall : clean +#if $[st_sources] +$[TAB] rm -rf $[st_dir] +#endif #if $[yxx_st_sources] $[lxx_st_sources] -$[TAB] rm -f $[patsubst %.yxx %.lxx,%.cxx,$[yxx_st_sources] $[lxx_st_sources]] +$[TAB] rm -f $[patsubst %.yxx,%.cxx %.h,$[yxx_st_sources]] $[patsubst %.lxx,%.cxx,$[lxx_st_sources]] #endif #if $[ne $[DEPENDENCY_CACHE_FILENAME],] $[TAB] rm -f $[DEPENDENCY_CACHE_FILENAME] @@ -214,16 +203,16 @@ clean-igate : #forscopes metalib_target lib_target ss_lib_target #define igatedb $[get_igatedb] #define igateoutput $[get_igateoutput] - #define igatemscan $[components $[get_igatedb:%=$[RELDIR]/$[so_dir]/%],$[active_component_libs]] - #define igatemout $[if $[igatemscan],lib$[TARGET]_module.cxx] + #define igatemscan $[get_igatemscan] + #define igatemout $[get_igatemout] #if $[igatedb] -$[TAB] rm -f $[so_dir]/$[igatedb] +$[TAB] rm -f $[igatedb] #endif #if $[igateoutput] -$[TAB] rm -f $[so_dir]/$[igateoutput] $[igateoutput:%.cxx=$[so_dir]/%.obj] +$[TAB] rm -f $[igateoutput] $[$[igateoutput]_obj] #endif #if $[igatemout] -$[TAB] rm -f $[so_dir]/$[igatemout] $[igatemout:%.cxx=$[so_dir]/%.obj] +$[TAB] rm -f $[igatemout] $[$[igatemout]_obj] #endif #end metalib_target lib_target ss_lib_target @@ -293,25 +282,15 @@ $[TAB] @test -d $[directory] || echo mkdir -p $[directory] $[TAB] @test -d $[directory] || mkdir -p $[directory] #end directory -// We need to make the .obj files depend on the $[so_dir] and -// $[st_dir] directories, to guarantee that the directories are built -// before the .obj files are generated, but we cannot depend on the -// directories directly or we get screwed up by the modification -// times. So we put this phony timestamp file in each directory. -#foreach directory $[sort \ - $[if $[st_sources],$[st_dir]] \ - ] -$[directory]/stamp : -$[TAB] @test -d $[directory] || echo mkdir -p $[directory] -$[TAB] @test -d $[directory] || mkdir -p $[directory] -$[TAB] @touch $[directory]/stamp -#end directory - +// We need to ensure that $[st_dir] exists. Trying to make the +// makefiles do this automatically just causes problems with +// multiprocess builds. +#mkdir $[st_dir] // Now it's time to start generating the rules to make our actual // targets. -igate : $[get_igatedb(metalib_target lib_target ss_lib_target):%=$[so_dir]/%] +igate : $[get_igatedb(metalib_target lib_target ss_lib_target):%=$[st_dir]/%] ///////////////////////////////////////////////////////////////////// @@ -353,29 +332,29 @@ igate : $[get_igatedb(metalib_target lib_target ss_lib_target):%=$[so_dir]/%] // component libraries. If it is nonempty, then we do need to // generate a module, and $[igatemout] is the name of the .cxx file // that interrogate will produce to make this module. -#define igatemscan $[components $[get_igatedb:%=$[RELDIR]/$[so_dir]/%],$[active_component_libs]] -#define igatemout $[if $[igatemscan],lib$[TARGET]_module.cxx] +#define igatemscan $[get_igatemscan] +#define igatemout $[get_igatemout] #if $[build_it] // Now output the rule to actually link the library from all of its // various .obj files. #define sources \ - $[unique $[patsubst %_src.cxx,,%.cxx %.c %.yxx %.lxx,$[so_dir]/%.obj,%,,$[compile_sources] $[igateoutput] $[igatemout]]] \ - $[components $[unique $[patsubst %_src.cxx,,%.cxx %.c %.yxx %.lxx,$[RELDIR]/$[so_dir]/%.obj,%,,$[compile_sources] $[get_igateoutput]]],$[active_component_libs]] - + $[patsubst %,$[%_obj],$[compile_sources]] \ + $[components $[patsubst %,$[RELDIR]/$[%_obj],$[compile_sources]],$[active_component_libs]] + #define varname $[subst -,_,lib$[TARGET]_so] $[varname] = $[sources] - #define target $[so_dir]/lib$[TARGET]$[dllext].$[dlllib] + #define target $[st_dir]/lib$[TARGET]$[dllext].$[dlllib] #define sources $($[varname]) #define flags $[get_cflags] $[C++FLAGS] $[CFLAGS_OPT$[OPTIMIZE]] $[CFLAGS_SHARED] $[building_var:%=/D%] #define mybasename $[basename $[notdir $[target]]] - #define tmpdirname_cyg $[directory]/$[mybasename] - #define tmpdirname_win $[directory]\$[mybasename] + #define tmpdirname_cyg $[install_lib_dir]/$[mybasename] + #define tmpdirname_win $[osfilename $[directory]] // not parallel (requires gmake 3.79) because of link.exe conflicts in TMP dir (see audiotraits dir) #if $[GENERATE_BUILDDATE] -.NOTPARALLEL $[target] : $[sources] $[so_dir]/stamp $[dtool_ver_dir_cyg]/version.rc $[dtool_ver_dir_cyg]/$[DLLBASEADDRFILENAME] +.NOTPARALLEL $[target] : $[sources] $[dtool_ver_dir_cyg]/version.rc $[dtool_ver_dir_cyg]/$[DLLBASEADDRFILENAME] // first generate builddate for rc compiler using compiler preprocessor $[TAB] mkdir -p $[tmpdirname_cyg] // this dir-creation-stuff is leftover from trying to resolve parallel link difficulties #define VER_RESOURCE "$[tmpdirname_win]\$[mybasename].res" @@ -387,7 +366,7 @@ $[TAB] $[SHARED_LIB_C++] $[VER_RESOURCE] $[TAB] $[SHARED_LIB_C] $[VER_RESOURCE] #endif #else -.NOTPARALLEL $[target] : $[sources] $[so_dir]/stamp $[dtool_ver_dir_cyg]/$[DLLBASEADDRFILENAME] +.NOTPARALLEL $[target] : $[sources] $[dtool_ver_dir_cyg]/$[DLLBASEADDRFILENAME] #if $[filter %.cxx %.yxx %.lxx,$[get_sources]] $[TAB] $[SHARED_LIB_C++] #else @@ -396,10 +375,10 @@ $[TAB] $[SHARED_LIB_C] #endif #if $[build_dlls] -$[so_dir]/lib$[TARGET]$[dllext].lib : $[so_dir]/lib$[TARGET]$[dllext].dll +$[st_dir]/lib$[TARGET]$[dllext].lib : $[st_dir]/lib$[TARGET]$[dllext].dll #endif #if $[build_pdbs] -$[so_dir]/lib$[TARGET]$[dllext].pdb : $[so_dir]/lib$[TARGET]$[dllext].dll +$[st_dir]/lib$[TARGET]$[dllext].pdb : $[st_dir]/lib$[TARGET]$[dllext].dll #endif #endif @@ -426,22 +405,22 @@ $[TAB] rm -f $[sort $[installed_files]] #endif #if $[build_dlls] -$[install_lib_dir]/lib$[TARGET]$[dllext].dll : $[so_dir]/lib$[TARGET]$[dllext].dll $[so_dir]/stamp +$[install_lib_dir]/lib$[TARGET]$[dllext].dll : $[st_dir]/lib$[TARGET]$[dllext].dll #define local lib$[TARGET]$[dllext].dll #define dest $[install_lib_dir] -$[TAB] cp -f $[so_dir]/$[local] $[dest] +$[TAB] cp -f $[st_dir]/$[local] $[dest] #endif -$[install_lib_dir]/lib$[TARGET]$[dllext].lib : $[so_dir]/lib$[TARGET]$[dllext].lib $[so_dir]/stamp +$[install_lib_dir]/lib$[TARGET]$[dllext].lib : $[st_dir]/lib$[TARGET]$[dllext].lib #define local lib$[TARGET]$[dllext].lib #define dest $[install_lib_dir] -$[TAB] cp -f $[so_dir]/$[local] $[dest] +$[TAB] cp -f $[st_dir]/$[local] $[dest] #if $[and $[build_dlls],$[build_pdbs]] -$[install_lib_dir]/lib$[TARGET]$[dllext].pdb : $[so_dir]/lib$[TARGET]$[dllext].pdb $[so_dir]/stamp +$[install_lib_dir]/lib$[TARGET]$[dllext].pdb : $[st_dir]/lib$[TARGET]$[dllext].pdb #define local lib$[TARGET]$[dllext].pdb #define dest $[install_lib_dir] -$[TAB] cp -f $[so_dir]/$[local] $[dest] +$[TAB] cp -f $[st_dir]/$[local] $[dest] #endif #if $[igatescan] @@ -457,26 +436,21 @@ $[TAB] cp -f $[so_dir]/$[local] $[dest] #define igatemod $[TARGET] #endif -$[install_igatedb_dir]/$[igatedb] : $[so_dir]/$[igatedb] $[so_dir]/stamp +$[install_igatedb_dir]/$[igatedb] : $[st_dir]/$[igatedb] #define local $[igatedb] #define dest $[install_igatedb_dir] -$[TAB] cp -f $[so_dir]/$[local] $[dest] +$[TAB] cp -f $[st_dir]/$[local] $[dest] // We have to split this out as a separate rule to properly support // parallel make. -$[so_dir]/$[igatedb] : $[so_dir]/$[igateoutput] +$[igatedb] : $[igateoutput] lib$[TARGET]_igatescan = $[igatescan] -$[so_dir]/$[igateoutput] : $[sort $[patsubst %.h,%.h,%.I,%.I,%.T,%.T,%,,$[dependencies $[igatescan]] $[igatescan:%=./%]]] $[so_dir]/stamp -$[TAB] $[INTERROGATE] -od $[so_dir]/$[igatedb] -oc $[so_dir]/$[igateoutput] $[interrogate_options] -module "$[igatemod]" -library "$[igatelib]" $(lib$[TARGET]_igatescan) +$[igateoutput] : $[sort $[patsubst %.h,%.h,%.I,%.I,%.T,%.T,%,,$[dependencies $[igatescan]] $[igatescan:%=./%]]] +$[TAB] $[INTERROGATE] -od $[igatedb] -oc $[igateoutput] $[interrogate_options] -module "$[igatemod]" -library "$[igatelib]" $(lib$[TARGET]_igatescan) + +#endif // igatescan -#define target $[igateoutput:%.cxx=$[so_dir]/%.obj] -#define source $[so_dir]/$[igateoutput] -#define ipath . $[target_ipath] -#define flags $[get_cflags] $[C++FLAGS] $[CFLAGS_OPT$[OPTIMIZE]] $[CFLAGS_SHARED] $[building_var:%=/D%] -$[target] : $[source] $[so_dir]/stamp -$[TAB] $[COMPILE_C++] -#endif // $[igatescan] #if $[igatemout] // And finally, some additional rules to build the interrogate module @@ -487,19 +461,13 @@ $[TAB] $[COMPILE_C++] #define igatemod $[TARGET] lib$[TARGET]_igatemscan = $[igatemscan] -#define target $[so_dir]/$[igatemout] +#define target $[igatemout] #define sources $(lib$[TARGET]_igatemscan) -$[target] : $[sources] $[so_dir]/stamp +$[target] : $[sources] $[TAB] $[INTERROGATE_MODULE] -oc $[target] -module "$[igatemod]" -library "$[igatelib]" $[interrogate_module_options] $[sources] -#define target $[igatemout:%.cxx=$[so_dir]/%.obj] -#define source $[so_dir]/$[igatemout] -#define ipath . $[target_ipath] -#define flags $[get_cflags] $[C++FLAGS] $[CFLAGS_OPT$[OPTIMIZE]] $[CFLAGS_SHARED] $[building_var:%=/D%] -$[target] : $[source] $[so_dir]/stamp -$[TAB] $[COMPILE_C++] -#endif // $[igatescan] +#endif // igatemout #end metalib_target lib_target @@ -516,10 +484,10 @@ $[TAB] $[COMPILE_C++] #forscopes noinst_lib_target #define varname $[subst -,_,lib$[TARGET]_so] -$[varname] = $[unique $[patsubst %_src.cxx,,%.cxx %.c %.yxx %.lxx,$[so_dir]/%.obj,%,,$[compile_sources]]] -#define target $[so_dir]/lib$[TARGET]$[dllext].$[dlllib] +$[varname] = $[patsubst %,$[%_obj],$[compile_sources]] +#define target $[st_dir]/lib$[TARGET]$[dllext].$[dlllib] #define sources $($[varname]) -$[target] : $[sources] $[so_dir]/stamp +$[target] : $[sources] #if $[filter %.cxx %.yxx %.lxx,$[get_sources]] $[TAB] $[SHARED_LIB_C++] #else @@ -527,10 +495,10 @@ $[TAB] $[SHARED_LIB_C] #endif #if $[build_dlls] -$[so_dir]/lib$[TARGET]$[dllext].lib : $[so_dir]/lib$[TARGET]$[dllext].dll +$[st_dir]/lib$[TARGET]$[dllext].lib : $[st_dir]/lib$[TARGET]$[dllext].dll #endif #if $[build_pdbs] -$[so_dir]/lib$[TARGET]$[dllext].pdb : $[so_dir]/lib$[TARGET]$[dllext].dll +$[st_dir]/lib$[TARGET]$[dllext].pdb : $[st_dir]/lib$[TARGET]$[dllext].dll #endif #end noinst_lib_target @@ -545,10 +513,10 @@ $[so_dir]/lib$[TARGET]$[dllext].pdb : $[so_dir]/lib$[TARGET]$[dllext].dll #forscopes static_lib_target ss_lib_target #define varname $[subst -,_,lib$[TARGET]_a] -$[varname] = $[unique $[patsubst %_src.cxx,,%.cxx %.c %.yxx %.lxx,$[st_dir]/%.obj,%,,$[compile_sources]]] +$[varname] = $[patsubst %,$[%_obj],$[compile_sources]] #define target $[st_dir]/lib$[TARGET]$[dllext].lib #define sources $($[varname]) -$[target] : $[sources] $[st_dir]/stamp +$[target] : $[sources] #if $[filter %.cxx %.yxx %.lxx,$[get_sources]] $[TAB] $[STATIC_LIB_C++] #else @@ -569,7 +537,7 @@ uninstall-lib$[TARGET] : $[TAB] rm -f $[sort $[installed_files]] #endif -$[install_lib_dir]/lib$[TARGET]$[dllext].lib : $[st_dir]/lib$[TARGET]$[dllext].lib $[st_dir]/stamp +$[install_lib_dir]/lib$[TARGET]$[dllext].lib : $[st_dir]/lib$[TARGET]$[dllext].lib #define local lib$[TARGET]$[dllext].lib #define dest $[install_lib_dir] $[TAB] cp -f $[st_dir]/$[local] $[dest] @@ -585,12 +553,12 @@ $[TAB] cp -f $[st_dir]/$[local] $[dest] ///////////////////////////////////////////////////////////////////// #forscopes sed_bin_target -$[TARGET] : $[st_dir]/$[TARGET] $[st_dir]/stamp +$[TARGET] : $[st_dir]/$[TARGET] #define target $[st_dir]/$[TARGET] #define source $[SOURCE] #define script $[COMMAND] -$[target] : $[source] $[st_dir]/stamp +$[target] : $[source] $[TAB] $[SED] $[TAB] chmod +x $[target] @@ -606,7 +574,7 @@ $[TAB] rm -f $[sort $[installed_files]] #define local $[TARGET] #define dest $[install_bin_dir] -$[install_bin_dir]/$[TARGET] : $[st_dir]/$[TARGET] $[st_dir]/stamp +$[install_bin_dir]/$[TARGET] : $[st_dir]/$[TARGET] $[TAB] cp -f $[st_dir]/$[local] $[dest] #end sed_bin_target @@ -618,14 +586,14 @@ $[TAB] cp -f $[st_dir]/$[local] $[dest] ///////////////////////////////////////////////////////////////////// #forscopes bin_target -$[TARGET] : $[st_dir]/$[TARGET].exe $[st_dir]/stamp +$[TARGET] : $[st_dir]/$[TARGET].exe #define varname $[subst -,_,bin_$[TARGET]] -$[varname] = $[unique $[patsubst %_src.cxx,,%.cxx %.c %.yxx %.lxx,$[st_dir]/%.obj,%,,$[compile_sources]]] +$[varname] = $[patsubst %,$[%_obj],$[compile_sources]] #define target $[st_dir]/$[TARGET].exe #define sources $($[varname]) #define ld $[get_ld] -$[target] : $[sources] $[st_dir]/stamp +$[target] : $[sources] #if $[ld] // If there's a custom linker defined for the target, we have to use it. $[TAB] $[ld] -o $[target] $[sources] $[lpath:%=-L%] $[libs:%=-l%] @@ -639,7 +607,7 @@ $[TAB] $[LINK_BIN_C] #endif #if $[build_pdbs] -$[st_dir]/$[TARGET].pdb : $[st_dir]/$[TARGET].exe $[st_dir]/stamp +$[st_dir]/$[TARGET].pdb : $[st_dir]/$[TARGET].exe #endif #define installed_files \ @@ -657,13 +625,13 @@ uninstall-$[TARGET] : $[TAB] rm -f $[sort $[installed_files]] #endif -$[install_bin_dir]/$[TARGET].exe : $[st_dir]/$[TARGET].exe $[st_dir]/stamp +$[install_bin_dir]/$[TARGET].exe : $[st_dir]/$[TARGET].exe #define local $[TARGET].exe #define dest $[install_bin_dir] $[TAB] cp -f $[st_dir]/$[local] $[dest] #if $[build_pdbs] -$[install_bin_dir]/$[TARGET].pdb : $[st_dir]/$[TARGET].pdb $[st_dir]/stamp +$[install_bin_dir]/$[TARGET].pdb : $[st_dir]/$[TARGET].pdb #define local $[TARGET].pdb #define dest $[install_bin_dir] $[TAB] cp -f $[st_dir]/$[local] $[dest] @@ -679,13 +647,13 @@ $[TAB] cp -f $[st_dir]/$[local] $[dest] ///////////////////////////////////////////////////////////////////// #forscopes noinst_bin_target test_bin_target -$[TARGET] : $[st_dir]/$[TARGET].exe $[st_dir]/stamp +$[TARGET] : $[st_dir]/$[TARGET].exe #define varname $[subst -,_,bin_$[TARGET]] -$[varname] = $[unique $[patsubst %_src.cxx,,%.cxx %.c %.yxx %.lxx,$[st_dir]/%.obj,%,,$[compile_sources]]] +$[varname] = $[patsubst %,$[%_obj],$[compile_sources]] #define target $[st_dir]/$[TARGET].exe #define sources $($[varname]) -$[target] : $[sources] $[st_dir]/stamp +$[target] : $[sources] #if $[filter %.cxx %.yxx %.lxx,$[get_sources]] $[TAB] $[LINK_BIN_C++] #else @@ -704,24 +672,23 @@ $[TAB] $[LINK_BIN_C] #foreach file $[sort $[yxx_st_sources]] #define target $[patsubst %.yxx,%.cxx,$[file]] #define target_header $[patsubst %.yxx,%.h,$[file]] +#define target_prebuilt $[target].prebuilt +#define target_header_prebuilt $[target_header].prebuilt #if $[HAVE_BISON] -#define source $[file] -$[target] : $[source] -$[TAB] $[BISON] $[YFLAGS] -y $[if $[YACC_PREFIX],-d --name-prefix=$[YACC_PREFIX]] $[source] +$[target] : $[file] +$[TAB] $[BISON] $[YFLAGS] -y $[if $[YACC_PREFIX],-d --name-prefix=$[YACC_PREFIX]] $[file] $[TAB] mv y.tab.c $[target] -$[TAB] mv y.tab.h $[patsubst %.yxx,%.h,$[source]] +$[TAB] mv y.tab.h $[target_header] $[target_header] : $[target] -$[target].prebuilt : $[target] -$[TAB] cp $[target] $[target].prebuilt -$[target_header].prebuilt : $[target_header] -$[TAB] cp $[target_header] $[target_header].prebuilt +$[target_prebuilt] : $[target] +$[TAB] cp $[target] $[target_prebuilt] +$[target_header_prebuilt] : $[target_header] +$[TAB] cp $[target_header] $[target_header_prebuilt] #else // HAVE_BISON -#define source $[target].prebuilt -$[target] : $[source] -$[TAB] cp $[source] $[target] -#define source $[target_header].prebuilt -$[target_header] : $[source] -$[TAB] cp $[source] $[target_header] +$[target] : $[target_prebuilt] +$[TAB] cp $[target_prebuilt] $[target] +$[target_header] : $[target_header_prebuilt] +$[TAB] cp $[target_header_prebuilt] $[target_header] #endif // HAVE_BISON #end file @@ -729,20 +696,20 @@ $[TAB] cp $[source] $[target_header] // Rules to generate a C++ file from a Flex input file. #foreach file $[sort $[lxx_st_sources]] #define target $[patsubst %.lxx,%.cxx,$[file]] +#define target_prebuilt $[target].prebuilt #if $[HAVE_BISON] #define source $[file] -$[target] : $[source] -$[TAB] $[FLEX] $[LFLAGS] $[if $[YACC_PREFIX],-P$[YACC_PREFIX]] -olex.yy.c $[source] +$[target] : $[file] +$[TAB] $[FLEX] $[LFLAGS] $[if $[YACC_PREFIX],-P$[YACC_PREFIX]] -olex.yy.c $[file] #define source lex.yy.c #define script /#include /d $[TAB] $[SED] -$[TAB] rm $[source] -$[target].prebuilt : $[target] -$[TAB] cp $[target] $[target].prebuilt +$[TAB] rm lex.yy.c +$[target_prebuilt] : $[target] +$[TAB] cp $[target] $[target_prebuilt] #else // HAVE_BISON -#define source $[target].prebuilt -$[target] : $[source] -$[TAB] cp $[source] $[target] +$[target] : $[target_prebuilt] +$[TAB] cp $[target_prebuilt] $[target] #endif // HAVE_BISON #end file @@ -757,11 +724,17 @@ $[TAB] cp $[source] $[target] // Rules to compile ordinary C files. #foreach file $[sort $[c_sources]] -#define target $[patsubst %.c,$[st_dir]/%.obj,$[file]] +#define target $[$[file]_obj] #define source $[file] #define ipath $[target_ipath] #define flags $[cflags] $[building_var:%=/D%] -$[target] : $[source] $[dependencies $[source]] $[st_dir]/stamp +#if $[ne $[file], $[notdir $file]] + // If the source file is not in the current directory, tack on "." + // to the ipath. + #set ipath $[ipath] . +#endif + +$[target] : $[source] $[get_depends $[source]] $[TAB] $[COMPILE_C] #end file @@ -769,20 +742,19 @@ $[TAB] $[COMPILE_C] // Rules to compile C++ files. #foreach file $[sort $[cxx_sources]] -#define target $[patsubst %.cxx,$[st_dir]/%.obj,$[file]] +#define target $[$[file]_obj] #define source $[file] #define ipath $[target_ipath] -#if $[$[source]_sources] -#define depends $[dependencies $[$[source]_sources]] -#else -#define depends $[dependencies $[source]] -#endif - #define flags $[c++flags] $[building_var:%=/D%] +#if $[ne $[file], $[notdir $file]] + // If the source file is not in the current directory, tack on "." + // to the ipath. + #set ipath $[ipath] . +#endif // Yacc must run before some files can be compiled, so all files // depend on yacc having run. -$[target] : $[source] $[depends] $[yxx_sources:%.yxx=%.h] $[st_dir]/stamp +$[target] : $[source] $[get_depends $[source]] $[yxx_sources:%.yxx=%.h] $[TAB] $[COMPILE_C++] #end file diff --git a/dtool/pptempl/Template.stopgap.pp b/dtool/pptempl/Template.stopgap.pp deleted file mode 100644 index c06e765721..0000000000 --- a/dtool/pptempl/Template.stopgap.pp +++ /dev/null @@ -1,699 +0,0 @@ -// -// Template.stopgap.pp -// -// This file defines the set of output files that will be generated to -// support our old-style Makefile system. It is intended to aid as a -// transition to the new system. -// - -////////////////////////////////////////////////////////////////////// -#if $[eq $[DIR_TYPE], src] -////////////////////////////////////////////////////////////////////// - -// For a source directory, build a Makefile, Makefile.install, and a -// Makefile.target for each target. - -#define submakes $[TARGET(static_lib_target):%=%.a] $[TARGET(lib_target noinst_lib_target):%=%.so] $[TARGET(sed_bin_target bin_target noinst_bin_target test_bin_target)] -#define install $[TARGET(static_lib_target):%=%.a] $[TARGET(lib_target noinst_lib_target):%=%.so] $[TARGET(sed_bin_target bin_target noinst_bin_target)] - -// Now iterate through the libraries we're building and see which ones -// actually *are* being included in a metalib. For each one that is, -// we install the appropriate deferred file. -#define deferred -#forscopes lib_target - #define metalib $[module $[TARGET],$[TARGET]] - #if $[ne $[metalib],] - #set deferred $[deferred] Deferred.$[metalib].lib$[TARGET].so - #endif -#end lib_target - -// Get the full set of libraries we depend on. -#call get_depend_libs - -// Also get the targets we'll be installing. -#define install_libs $[sort $[TARGET(lib_target):%=lib%.so] $[TARGET(static_lib_target):%=lib%.a] $[INSTALL_LIBS]] -#define install_bin $[sort $[TARGET(bin_target)] $[INSTALL_BIN]] -#define install_scripts $[sort $[INSTALL_SCRIPTS(static_lib_target lib_target bin_target)] $[TARGET(sed_bin_target)] $[INSTALL_SCRIPTS]] -#define install_headers $[sort $[INSTALL_HEADERS(static_lib_target lib_target bin_target)] $[INSTALL_HEADERS]] -#define install_data $[sort $[INSTALL_DATA(static_lib_target lib_target sed_bin_target bin_target)] $[INSTALL_DATA]] $[sort $[INSTALL_CONFIG(static_lib_target lib_target sed_bin_target bin_target)] $[INSTALL_CONFIG]] - -// Collect the set of interrogate database files we'll install, -// possibly one for each library we build. -#define install_igatedb -#if $[run_interrogate] - #forscopes lib_target - #if $[ne $[IGATESCAN],] - #set install_igatedb $[install_igatedb] lib$[TARGET].in - #endif - #end lib_target -#endif - - -#output Makefile -#format makefile -#### Meta Makefile. -#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[SOURCEFILE]. -################################# DO NOT EDIT ########################### - - -#### Sub make targets (extension of sub Makefile, eg 'foo' for Makefile.foo): -SUBMAKES = $[submakes] - -#### List the minimal set of sub makes on the list above required to install. -INSTALL = $[install] - -#### Location of sub Makefiles. -MAKEDIR = . - -#### The action is here. -include $(DTOOL)/include/Makefile.meta.rules - -#### Sub-make build order dependencies: -# foo: bar -#end Makefile - - - -#output Makefile.install -#format makefile -#### Installation makefile -#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[SOURCEFILE]. -################################# DO NOT EDIT ########################### - -# Note: This file is included by the project-wide Makefile so the current -# directory is the project root. Also, commented-out fields are optional. - -#### Package name and location (if not src/all/$(PACKAGE)): -PACKAGE = $[DIRNAME] -PKGROOT = $[PATH] - -ifneq (,$(PACKAGE)) - -#### Package dependencies (USESOTHER needs relative paths from project root): -USESLIBS = $[depend_libs] -# USESINCLUDE = -# USESOTHER = - -#### Installed files: -LIBS = $[install_libs] -DEFERRED = $[deferred] -INCLUDE = $[install_headers] -BINS = $[install_bin] -SCRIPTS = $[install_scripts] -# SS = -# STK = -# MODELS = -ETC = $[install_data] -IGATEDB =$[install_igatedb] -# DOC = -# MAN = -# FONTS = -# ICONS = -# APPDEFAULTS = -# TCL = -# TELEUSE = -# SHADERS = - -#### Other files to be installed (use relative pathname from project root): -#if $[ne $[INSTALL_PARSER_INC],] -PARSER_INC = $[INSTALL_PARSER_INC] -SRC_PARSER_INC = $(addprefix $(PKGROOT)/,$(PARSER_INC)) -INST_PARSER_INC = $(addprefix include/parser-inc/,$(PARSER_INC)) -OTHER = $(INST_PARSER_INC) -#else -# OTHER = -#endif - -#### Where the action happens. -include $(DTOOL)/include/Makefile.install.rules - -#### Install actions for OTHER files (source must be in $(PKGROOT)): -# [ installed file ] : $(PKGROOT)/[ source file ] # Files must have same name -# $(INSTALL) # Copies from source to dest -# -# [ installed file ] : $(PKGROOT)/[ source file ] -# $(MKINSTALL) # Also makes directory if needed - -#if $[ne $[INSTALL_PARSER_INC],] -$(INST_PARSER_INC) : include/parser-inc/% : $(PKGROOT)/% - $(MKINSTALL) -#endif - -#### Other install/uninstall actions: -# install-$(PKGROOT): #Add dependencies here -# Add actions here -# -# uninstall-$(PKGROOT): #Add dependencies here -# Add actions here - -#### Sub-package Makefile.install inclusions: -# include foo/Makefile.install - -endif -#end Makefile.install - - - -// Now generate a suitable Makefile for each library target. -#forscopes lib_target noinst_lib_target - -// Again, is this library included in a metalib? If so, output the -// appropriate deferred rules. -#define metalib $[module $[TARGET],$[TARGET]] - -// We might need to define a BUILDING_ symbol for win32. We use the -// BUILDING_DLL variable name, defined typically in the metalib, for -// this; but in some cases, where the library isn't part of a metalib, -// we define BUILDING_DLL directly for the target. -#define building_var $[BUILDING_DLL] -#if $[ne $[metalib],] - #set building_var $[module $[BUILDING_DLL],$[TARGET]] -#endif - -// Get the full set of sources for this target. -#call get_sources -#call get_libs - -// Which files will we interrogate, if any? -#define igatescan $[get_igatescan] - -#output Makefile.$[TARGET].so -#format makefile -#### Makefile for DSO's. Any fields commented out are optional. -#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[SOURCEFILE]. -################################# DO NOT EDIT ########################### - -#### Target's name: -TARGET = lib$[TARGET].so -DEFERRED_TARGET = $[metalib] - -# Standard .o file conversion information. - -#### Lex files -LFILES = $[filter %.lxx,$[sources]] -LEX = flex -LFLAGS = $[LFLAGS] $[YACC_PREFIX:%=-P%] -olex.yy.c -LEXTENSION = cxx - -#### Yacc files -YFILES = $[filter %.yxx,$[sources]] -YACC = bison -YFLAGS = -y -d $[patsubst %,--name-prefix=%,$[YACC_PREFIX]] -YEXTENSION = cxx - -#### C files -CFILES = $[filter %.c,$[sources]] -CFLAGS = $[building_var:%=-D%] $[alt_cflags] $[CFLAGS] - -#### C++ files -C++FILES = $[filter %.cxx,$[sources]] -C++FLAGS = $[building_var:%=-D%] $[alt_cflags] $[C++FLAGS] -# USETEMPLATES = TRUE -# PTREPOSITORY = # Specify only if you want a specific name - -#### Interrogate info -IGATESCAN = $[igatescan] -IGATEFLAGS = $[alt_ipath:%=-I%] -# IGATEFILE = # Specify only if you want a specific name - -#### Additional search directories for C/C++ header files: -IPATH = $[alt_ipath:%=-I%] - -#### Location to put .o files: -# ODIR = - -#### Source file dependencies (unnecessary with clearmake) -# foo.c: foo.h - -#### Other files and lib. Include $(ODIR) in any .o names. -# OFILES = -WHEN_NO_DEFER_LIBS = $[when_no_defer:%=-l%] -WHEN_DEFER_LIBS = $[when_defer:%=-l%] -LIBS = $[when_either:%=-l%] -SYSLIBS = $[patsubst %.lib,%.lib,%,-l%,$[unique $[alt_libs]]] - -#### Additional search directories for lib: -LPATH = $[alt_lpath:%=-L%] - -#### Other linker flags. -#if $[ne $[alt_ld],] -LD = $[alt_ld] -#endif -# LDFLAGS = - -#### Pull in standard .o make variables -include $(DTOOL)/include/Makefile.o.vars - -#### The .o action is here. -include $(DTOOL)/include/Makefile.o.rules - -#### Pull in standard binary make variables. -include $(DTOOL)/include/Makefile.bin.vars - -#### The .so action is here. -include $(DTOOL)/include/Makefile.so.rules -#end Makefile.$[TARGET].so - -#end lib_target noinst_lib_target - - - -// Also generate a suitable Makefile for each static library target. -#forscopes static_lib_target - -// Get the full set of sources for this target. -#call get_sources -#call get_libs - -#output Makefile.$[TARGET].a -#format makefile -#### Makefile for archive libraries. Any fields commented out are optional. -#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[SOURCEFILE]. -################################# DO NOT EDIT ########################### - -#### Target's name: -TARGET = lib$[TARGET].a - -# Standard .o file conversion information. - -#### Lex files -LFILES = $[filter %.lxx,$[sources]] -LEX = flex -LFLAGS = $[LFLAGS] $[YACC_PREFIX:%=-P%] -olex.yy.c -LEXTENSION = yy.cxx -# LSUBST = - -#### Yacc files -YFILES = $[filter %.yxx,$[sources]] -YACC = bison -YFLAGS = -y -d $[patsubst %,--name-prefix=%,$[YACC_PREFIX]] -YEXTENSION = tab.cxx -# YSUBST = - -#### C files -CFILES = $[filter %.c,$[sources]] -CFLAGS = $[building_var:%=-D%] $[alt_cflags] $[CFLAGS] - -#### C++ files -C++FILES = $[filter %.cxx,$[sources]] -C++FLAGS = $[building_var:%=-D%] $[alt_cflags] $[C++FLAGS] -# USETEMPLATES = TRUE -# PTREPOSITORY = # Specify only if you want a specific name - -#### Additional search directories for C/C++ header files: -IPATH = $[alt_ipath:%=-I%] - -#### Location to put .o files: -# ODIR = - -#### Source file dependencies (unnecessary with clearmake) -# foo.c: foo.h - -#### Other .o files. -# OFILES = - -#### Libs and flags for template instantiation. -WHEN_NO_DEFER_LIBS = $[when_no_defer:%=-l%] -WHEN_DEFER_LIBS = $[when_defer:%=-l%] -LIBS = $[when_either:%=-l%] -SYSLIBS = $[patsubst %.lib,%.lib,%,-l%,$[unique $[alt_libs]]] - -#### Additional search directories for lib: -LPATH = $[alt_lpath:%=-L%] - -#### Archiver flags -# ARFLAGS = - -#### Pull in standard .o make variables -include $(DTOOL)/include/Makefile.o.vars - -#### The .o action is here. -include $(DTOOL)/include/Makefile.o.rules - -#### Pull in standard binary make variables. -include $(DTOOL)/include/Makefile.bin.vars - -#### The .a action is here. -include $(DTOOL)/include/Makefile.a.rules -#end Makefile.$[TARGET].a - -#end static_lib_target - - - -// And also generate a suitable Makefile for each binary target. -#forscopes bin_target noinst_bin_target test_bin_target - -// Get the full set of sources for this target. -#call get_sources -#call get_libs - -#output Makefile.$[TARGET] -#format makefile -#### Makefile for binaries. Any fields commented out are optional. -#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[SOURCEFILE]. -################################# DO NOT EDIT ########################### - -#### Target's name: -TARGET = $[TARGET] - -# Standard .o file conversion information. - -#### Lex files -LFILES = $[filter %.lxx,$[sources]] -LEX = flex -LFLAGS = $[LFLAGS] $[YACC_PREFIX:%=-P%] -olex.yy.c -LEXTENSION = yy.cxx -# LSUBST = - -#### Yacc files -YFILES = $[filter %.yxx,$[sources]] -YACC = bison -YFLAGS = -y -d $[patsubst %,--name-prefix=%,$[YACC_PREFIX]] -YEXTENSION = tab.cxx -# YSUBST = - -#### C files -CFILES = $[filter %.c,$[sources]] -CFLAGS = $[building_var:%=-D%] $[alt_cflags] $[CFLAGS] - -#### C++ files -C++FILES = $[filter %.cxx,$[sources]] -C++FLAGS = $[building_var:%=-D%] $[alt_cflags] $[C++FLAGS] - -#### Additional search directories for C/C++ header files: -IPATH = $[alt_ipath:%=-I%] - -#### Location to put .o files: -# ODIR = - -#### Source file dependencies (unnecessary with clearmake) -# foo.c: foo.h - -#### Other files and lib. Include $(ODIR) in any .o names. -# OFILES = -WHEN_NO_DEFER_LIBS = $[when_no_defer:%=-l%] -WHEN_DEFER_LIBS = $[when_defer:%=-l%] -LIBS = $[when_either:%=-l%] -SYSLIBS = $[patsubst %.lib,%.lib,%,-l%,$[unique $[alt_libs]]] - -#### Additional search directories for lib: -LPATH = $[alt_lpath:%=-L%] - -#### Other linker flags. -#if $[ne $[alt_ld],] -LD = $[alt_ld] -#endif -# LDFLAGS = - -#### Pull in standard .o make variables -include $(DTOOL)/include/Makefile.o.vars - -#### The .o action is here. -include $(DTOOL)/include/Makefile.o.rules - -#### Pull in standard binary make variables. -include $(DTOOL)/include/Makefile.bin.vars - -#### The bin action is here. -include $(DTOOL)/include/Makefile.bin.rules -#end Makefile.$[TARGET] - -#end bin_target noinst_bin_target test_bin_target - - -// Finally, generate the special scripts from the sed_bin_targets. Hopefully -// there won't be too many of these in the tree, since these are fairly -// Unix-specific. -#forscopes sed_bin_target -#output Makefile.$[TARGET] -#format makefile -#### This is a special makefile just to generate the $[TARGET] script. - -$[TARGET] : $[SOURCE] - sed $[COMMAND] $^ >$@ - chmod +x $@ - -clean : - -cleanall : - rm -f $[TARGET] -#end Makefile.$[TARGET] -#end sed_bin_target - - -////////////////////////////////////////////////////////////////////// -#elif $[eq $[DIR_TYPE], metalib] -////////////////////////////////////////////////////////////////////// - -// A metalib directory is similar to a regular source directory, -// but a little simpler. - -#define submakes $[TARGET(metalib_target):%=%.so] - - -// Get the full set of libraries we depend on. -#call get_depend_libs - -// Also get the targets we'll be installing. -#define install_libs $[TARGET(metalib_target):%=lib%.so] -#define install_headers $[INSTALL_HEADERS(metalib_target)] -#define install_data $[INSTALL_DATA(metalib_target)] $[INSTALL_CONFIG(metalib_target)] - - -#output Makefile -#format makefile -#### Meta Makefile. -#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[SOURCEFILE]. -################################# DO NOT EDIT ########################### - - -#### Sub make targets (extension of sub Makefile, eg 'foo' for Makefile.foo): -SUBMAKES = $[submakes] - -#### List the minimal set of sub makes on the list above required to install. -INSTALL = $[submakes] - -#### Location of sub Makefiles. -MAKEDIR = . - -#### The action is here. -include $(DTOOL)/include/Makefile.meta.rules - -#### Sub-make build order dependencies: -# foo: bar -#end Makefile - - - -#output Makefile.install -#format makefile -#### Installation makefile -#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[SOURCEFILE]. -################################# DO NOT EDIT ########################### - -# Note: This file is included by the project-wide Makefile so the current -# directory is the project root. Also, commented-out fields are optional. - -#### Package name and location (if not src/all/$(PACKAGE)): -PACKAGE = $[DIRNAME] -PKGROOT = $[PATH] - -ifneq (,$(PACKAGE)) - -#### Package dependencies (USESOTHER needs relative paths from project root): -USESLIBS = $[depend_libs] -# USESINCLUDE = -# USESOTHER = - -#### Installed files: -LIBS = $[install_libs] -INCLUDE = $[install_headers] -# BINS = -# SS = -# STK = -# MODELS = -# ETC = -# DOC = -# MAN = -# FONTS = -# ICONS = -# APPDEFAULTS = -# TCL = -# TELEUSE = -# SHADERS = - -#### Other files to be installed (use relative pathname from project root): -# OTHER = - -#### Where the action happens. -include $(DTOOL)/include/Makefile.install.rules - -#### Install actions for OTHER files (source must be in $(PKGROOT)): -# [ installed file ] : $(PKGROOT)/[ source file ] # Files must have same name -# $(INSTALL) # Copies from source to dest -# -# [ installed file ] : $(PKGROOT)/[ source file ] -# $(MKINSTALL) # Also makes directory if needed - -#### Other install/uninstall actions: -# install-$(PKGROOT): #Add dependencies here -# Add actions here -# -# uninstall-$(PKGROOT): #Add dependencies here -# Add actions here - -#### Sub-package Makefile.install inclusions: -# include foo/Makefile.install - -endif -#end Makefile.install - -// Now generate a suitable Makefile for each metalib target. -#forscopes metalib_target - -#define building_var $[BUILDING_DLL] - -// Get the full set of sources for this target. -#call get_sources -#call get_libs - -#define igatemscan $[get_igatemscan] - -#output Makefile.$[TARGET].so -#format makefile -#### Makefile for DSO's. Any fields commented out are optional. -#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[SOURCEFILE]. -################################# DO NOT EDIT ########################### - -#### Target's name: -TARGET = lib$[TARGET].so - -# Standard .o file conversion information. - -#### Lex files -LFILES = $[filter %.lxx,$[sources]] -LEX = flex -LFLAGS = $[LFLAGS] $[YACC_PREFIX:%=-P%] -olex.yy.c -LEXTENSION = yy.cxx -# LSUBST = - -#### Yacc files -YFILES = $[filter %.yxx,$[sources]] -YACC = bison -YFLAGS = -y -d $[patsubst %,--name-prefix=%,$[YACC_PREFIX]] -YEXTENSION = tab.cxx -# YSUBST = - -#### C files -CFILES = $[filter %.c,$[sources]] -CFLAGS = $[building_var:%=-D%] $[alt_cflags] $[CFLAGS] - -#### C++ files -C++FILES = $[filter %.cxx,$[sources]] -C++FLAGS = $[building_var:%=-D%] $[alt_cflags] $[C++FLAGS] -# USETEMPLATES = TRUE -# PTREPOSITORY = # Specify only if you want a specific name - -#### Interrogate info -# IGATESCAN = -# IGATEFLAGS = -# IGATEFILE = # Specify only if you want a specific name -IGATEMSCAN = $[igatemscan] - -#### Pull in deferred-target files built in other packages -DEFERRED_FILES = $[TARGET] - -#### Additional search directories for C/C++ header files: -IPATH = $[alt_ipath:%=-I%] - -#### Location to put .o files: -# ODIR = - -#### Source file dependencies (unnecessary with clearmake) -# foo.c: foo.h - -#### Other files and lib. Include $(ODIR) in any .o names. -# OFILES = -WHEN_NO_DEFER_LIBS = $[when_no_defer:%=-l%] -WHEN_DEFER_LIBS = $[when_defer:%=-l%] -LIBS = $[when_either:%=-l%] -SYSLIBS = $[patsubst %.lib,%.lib,%,-l%,$[unique $[alt_libs]]] - -#### Additional search directories for lib: -LPATH = $[alt_lpath:%=-L%] - -#### Other linker flags. -#if $[ne $[alt_ld],] -LD = $[alt_ld] -#endif -# LDFLAGS = - -#### Pull in standard .o make variables -include $(DTOOL)/include/Makefile.o.vars - -#### The .o action is here. -include $(DTOOL)/include/Makefile.o.rules - -#### Pull in standard binary make variables. -include $(DTOOL)/include/Makefile.bin.vars - -#### The .so action is here. -include $(DTOOL)/include/Makefile.so.rules -#end Makefile.$[TARGET].so - -#end metalib_target - - -////////////////////////////////////////////////////////////////////// -#elif $[eq $[DIR_TYPE], group] -////////////////////////////////////////////////////////////////////// - -// This is a group directory: a directory above a collection of source -// directories, e.g. $DTOOL/src. We don't need to output anything in -// this directory. - - - -////////////////////////////////////////////////////////////////////// -#elif $[eq $[DIR_TYPE], toplevel] -////////////////////////////////////////////////////////////////////// - -// This is the toplevel directory, e.g. $DTOOL. Here we build the -// root makefile and also synthesize the dtool_config.h (or whichever -// file) we need. - -#output Makefile -#format makefile -#### Generated automatically by $[PPREMAKE] $[PPREMAKE_VERSION] from $[SOURCEFILE]. -################################# DO NOT EDIT ########################### - -# Specify project name and project root directory. -CTPROJECT = $[PACKAGE] -CTPROJROOT = $($[upcase $[PACKAGE]]) - -include $(DTOOL)/include/Makefile.project.vars - -// Iterate through all of our known source files. Each src and -// metalib type file gets its corresponding Makefile.install listed -// here. However, we test for $[DIR_TYPE] of toplevel, because the -// source directories typically don't define their own DIR_TYPE -// variable, and they end up inheriting this one dynamically. -#forscopes */ -#if $[or $[eq $[DIR_TYPE], src],$[eq $[DIR_TYPE], metalib],$[and $[eq $[DIR_TYPE], toplevel],$[ne $[DIRNAME],top]]] -#if $[build_directory] -include $[PATH]/Makefile.install -#endif -#endif -#end */ - -#end Makefile - -// If there is a file called LocalSetup.pp in the package's top -// directory, then invoke that. It might contain some further setup -// instructions. -#sinclude $[TOPDIRPREFIX]LocalSetup.stopgap.pp -#sinclude $[TOPDIRPREFIX]LocalSetup.pp - -////////////////////////////////////////////////////////////////////// -#endif // DIR_TYPE diff --git a/dtool/pptempl/compilerSettings.pp b/dtool/pptempl/compilerSettings.pp index 1e8d9a0f6d..d42e8eb9fb 100644 --- a/dtool/pptempl/compilerSettings.pp +++ b/dtool/pptempl/compilerSettings.pp @@ -10,7 +10,7 @@ #define OPT1FLAGS /GZ // Note: Zi cannot be used on multiproc builds with precomp hdrs, Z7 must be used instead - #defer DEBUGPDBFLAGS /Zi /Fd"$[osfilename $[target:%.obj=%.pdb]]" + #defer DEBUGPDBFLAGS /Zi /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[notdir $[target]]]]" #defer DEBUGFLAGS /MDd $[BROWSEINFO_FLAG] $[DEBUGINFOFLAGS] $[DEBUGPDBFLAGS] #define RELEASEFLAGS /MD #define WARNING_LEVEL_FLAG /W3 @@ -82,7 +82,7 @@ #define WARNING_LEVEL_FLAG /W3 // WL // Note: Zi cannot be used on multiproc builds with precomp hdrs, Z7 must be used instead - #defer DEBUGPDBFLAGS /Zi /Fd"$[osfilename $[target:%.obj=%.pdb]]" + #defer DEBUGPDBFLAGS /Zi /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[notdir $[target]]]]" #defer DEBUGFLAGS /MDd $[BROWSEINFO_FLAG] $[DEBUGINFOFLAGS] $[DEBUGPDBFLAGS] #define RELEASEFLAGS /MD @@ -112,7 +112,7 @@ #define COMMONFLAGS /DHAVE_DINKUM /Gi- /Qwd985 /Qvc7 /G6 // Note: Zi cannot be used on multiproc builds with precomp hdrs, Z7 must be used instead - #defer DEBUGPDBFLAGS /Zi /Qinline_debug_info /Fd"$[osfilename $[target:%.obj=%.pdb]]" + #defer DEBUGPDBFLAGS /Zi /Qinline_debug_info /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[notdir $[target]]]]" // Oy- needed for MS debugger #defer DEBUGFLAGS /Oy- /MDd $[BROWSEINFO_FLAG] $[DEBUGINFOFLAGS] $[DEBUGPDBFLAGS] #define RELEASEFLAGS /MD @@ -154,7 +154,7 @@ #define COMMONFLAGS #define OPTFLAGS /O2 /Ogity /G6 #define OPT1FLAGS /GZ - #defer DEBUGFLAGS /MDd /Zi $[BROWSEINFO_FLAG] /Fd"$[osfilename $[target:%.obj=%.pdb]]" + #defer DEBUGPDBFLAGS /MDd /Zi $[BROWSEINFO_FLAG] /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[notdir $[target]]]]" #define RELEASEFLAGS /MD #define EXTRA_LIBPATH #define EXTRA_INCPATH @@ -176,7 +176,7 @@ #define COMMONFLAGS #define OPTFLAGS /O2 /Ogity /G6 #define OPT1FLAGS /GZ - #defer DEBUGFLAGS /MDd /Zi $[BROWSEINFO_FLAG] /Fd"$[osfilename $[target:%.obj=%.pdb]]" + #defer DEBUGPDBFLAGS /MDd /Zi $[BROWSEINFO_FLAG] /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[notdir $[target]]]]" #define RELEASEFLAGS /MD #define EXTRA_LIBPATH #define EXTRA_INCPATH