Changeset 980


Ignore:
Timestamp:
12/10/2006 21:50:24 (5 years ago)
Author:
chris
Message:
  • Support multiple implicit dependencies
  • Add lib/win32 as an implicit dependency on Win32
  • Make lib/common depend on lib/win32 on Win32
  • Fix space between test file name platform executable extension,

and between executable name and arguments, in test shell scripts

  • Add support for compiling resource files (.rc) on Win32
  • Fix dependencies to avoid unnecessary rebuilds when not using BSD make
  • Code cleanups
  • Fix typos
File:
1 edited

Legend:

Unmodified
Added
Removed
  • box/trunk/infrastructure/makebuildenv.pl.in

    r538 r980  
    1515print "Box build environment setup.\n\n"; 
    1616 
    17  
    18 my $implicit_dep = 'lib/common'; 
     17my @implicit_deps = ('lib/common'); 
    1918 
    2019# work out platform variables 
     
    3938my %env_flags; 
    4039 
    41 my $windows_include_path = "-I../../lib/win32 "; 
    42 if ($target_os ne "mingw32" && $target_os ne "winnt") 
    43 { 
    44         $windows_include_path = ""; 
    45         $env_flags{'IGNORE_lib/win32'} = 1; 
     40my $windows_include_path = ""; 
     41if ($target_windows) 
     42{ 
     43        $module_dependency{"lib/common"} = ["lib/win32"]; 
     44        push @implicit_deps, "lib/win32"; 
     45} 
     46else 
     47{ 
     48        # $env_flags{'IGNORE_lib/win32'} = 1; 
    4649} 
    4750 
     
    272275                } 
    273276        } 
    274         $module_dependency{$mod} = [$implicit_dep,@md]; 
     277        $module_dependency{$mod} = [@implicit_deps,@md]; 
    275278        $module_library_link_opts{$mod} = [@lo]; 
    276279         
     
    287290 
    288291# make dirs for implicit dep 
    289 mkdir "release/$implicit_dep",0755; 
    290 mkdir "debug/$implicit_dep",0755; 
     292foreach my $dep (@implicit_deps) 
     293{ 
     294        mkdir "release/$dep",0755; 
     295        mkdir "debug/$dep",0755; 
     296} 
    291297 
    292298# write a list of all the modules we've configured to use 
     
    297303#define _CONFIGURED_MODULES__H 
    298304__E 
    299 for($implicit_dep,@modules) 
     305for(@implicit_deps,@modules) 
    300306{ 
    301307        my $m = $_; 
     
    311317# now make a list of all the .h files we can find, recording which module they're in 
    312318my %hfiles; 
    313 for my $mod (@modules, $implicit_dep) 
     319for my $mod (@modules, @implicit_deps) 
    314320{ 
    315321        opendir DIR,$mod; 
     
    348354} 
    349355 
    350 for my $mod (@modules, $implicit_dep) 
     356for my $mod (@modules, @implicit_deps) 
    351357{ 
    352358        opendir DIR,$mod; 
     
    374380print "done\n\nGenerating Makefiles...\n"; 
    375381 
     382my %module_resources_win32; 
    376383 
    377384# Then write a makefile for each module 
    378 for my $mod (@modules, $implicit_dep) 
     385for my $mod (@implicit_deps, @modules) 
    379386{ 
    380387        print $mod,"\n"; 
     
    417424                 
    418425                writetestfile("$mod/_t",  
    419                         './test' . $platform_exe_ext . '$1 $2 $3 $4 $5', $mod); 
     426                        './test' . $platform_exe_ext . ' $1 $2 $3 $4 $5', $mod); 
    420427                writetestfile("$mod/_t-gdb",  
    421                         'gdb ./test ' . $platform_exe_ext, $mod); 
     428                        'gdb ./test' . $platform_exe_ext, $mod); 
    422429                 
    423430        } 
     
    442449                # and then dedup and reorder them 
    443450                my %d_done; 
    444                 for(my $a = $#deps_raw; $a >= 0; $a--) 
    445                 { 
    446                         if(!exists $d_done{$deps_raw[$a]}) 
     451                foreach my $dep (reverse @deps_raw) 
     452                { 
     453                        if(!exists $d_done{$dep}) 
    447454                        { 
    448455                                # insert 
    449                                 push @all_deps_for_module, $deps_raw[$a]; 
     456                                push @all_deps_for_module, $dep; 
    450457                                # mark as done 
    451                                 $d_done{$deps_raw[$a]} = 1; 
     458                                $d_done{$dep} = 1; 
    452459                        } 
    453460                } 
     
    485492 
    486493        my $release_flags = "-O2"; 
    487         if ($target_os eq "mingw32") 
     494        if ($target_windows) 
    488495        { 
    489496                $release_flags = "-O0 -g"; 
     
    500507RANLIB = ranlib 
    501508PERL = "@PERL@" 
     509WINDRES = windres 
    502510.ifdef RELEASE 
    503511CXXFLAGS = -DNDEBUG $release_flags -Wall $include_paths $extra_platform_defines -DBOX_VERSION="\\"$product_version\\"" 
     
    547555        } 
    548556         
    549         # first, obtain a list of depenencies within the .h files 
     557        # first, obtain a list of dependencies within the .h files 
    550558        my %headers; 
    551559        for my $h (grep /\.h\Z/i, @items) 
     
    567575        # then... do the cpp files... 
    568576        my @obj_base; 
    569         for my $cpp (@items) 
    570         { 
    571                 next unless $cpp =~ m/\A(.+)\.cpp\Z/i; 
    572                 next if $cpp =~ /\A\._/;        # Temp Mac OS Resource hack 
     577        for my $file (@items) 
     578        { 
     579                my $is_cpp = $file =~ m/\A(.+)\.cpp\Z/i; 
     580                my $is_rc  = $file =~ m/\A(.+)\.rc\Z/i; 
     581                my $base = $1; 
     582 
     583                if ($target_windows) 
     584                { 
     585                        next if not $is_cpp and not $is_rc; 
     586                } 
     587                else 
     588                { 
     589                        next if not $is_cpp; 
     590                } 
     591 
     592                next if $file =~ /\A\._/; # Temp Mac OS Resource hack 
    573593 
    574594                # store for later 
    575                 my $base = $1; 
    576595                push @obj_base,$base; 
    577596         
    578597                # get the file... 
    579                 open FL,"$mod/$cpp"; 
     598                open FL,"$mod/$file"; 
    580599                my $f; 
    581                 read FL,$f,-s "$mod/$cpp"; 
     600                read FL,$f,-s "$mod/$file"; 
    582601                close FL; 
    583602                 
     
    593612                 
    594613                # write the line for this cpp file 
    595                 $make .= $out_name.': '.join(' ',$cpp,map 
    596                         { ($hfiles{$_} eq $mod)?$_:'../../'.$hfiles{$_}."/$_" } keys %dep)."\n"; 
    597                 $make .= "\t\$(CXX) \$(CXXFLAGS) $compile_line_extra -c $cpp -o $out_name\n\n"; 
    598  
     614                my @dep_paths = map  
     615                {  
     616                        ($hfiles{$_} eq $mod) 
     617                        ? $_  
     618                        : '../../'.$hfiles{$_}."/$_" 
     619                } 
     620                keys %dep; 
     621 
     622                $make .= $out_name.': '.join(' ',$file,@dep_paths)."\n"; 
     623 
     624                if ($is_cpp) 
     625                { 
     626                        $make .= "\t\$(CXX) \$(CXXFLAGS) $compile_line_extra ". 
     627                                "-c $file -o $out_name\n\n"; 
     628                } 
     629                elsif ($is_rc) 
     630                { 
     631                        $make .= "\t\$(WINDRES) $file $out_name\n\n"; 
     632                        my $res_list = $module_resources_win32{$mod}; 
     633                        $res_list ||= []; 
     634                        push @$res_list, $base.'.o'; 
     635                        $module_resources_win32{$mod} = $res_list; 
     636                } 
    599637        } 
    600638 
     
    648686 
    649687        my $o_file_list = join(' ',map {'$(OUTDIR)/'.$_.'.o'} @objs); 
     688 
     689        if ($has_deps and not $bsd_make) 
     690        { 
     691                print MAKE ".PHONY: all\n" . 
     692                        "all: dep_modules $end_target\n\n"; 
     693        } 
     694 
    650695        print MAKE $end_target,': ',$o_file_list; 
    651         print MAKE ' dep_modules' if $has_deps and not $bsd_make; 
    652696        print MAKE " ",$lib_files unless $target_is_library; 
    653697        print MAKE "\n"; 
    654698         
     699        if ($target_windows) 
     700        { 
     701                foreach my $dep (@all_deps_for_module) 
     702                { 
     703                        my $res_list = $module_resources_win32{$dep}; 
     704                        next unless $res_list; 
     705                        $o_file_list .= ' '.join(' ',  
     706                                map {'$(OUTBASE)/'.$dep."/$_"} @$res_list); 
     707                } 
     708        } 
     709 
    655710        # stuff to make the final target... 
    656711        if($target_is_library) 
Note: See TracChangeset for help on using the changeset viewer.