diff options
-rwxr-xr-x | tools/buildzip.pl | 27 | ||||
-rw-r--r-- | tools/root.make | 53 |
2 files changed, 50 insertions, 30 deletions
diff --git a/tools/buildzip.pl b/tools/buildzip.pl index de7fd90e79..6d25a01f8f 100755 --- a/tools/buildzip.pl +++ b/tools/buildzip.pl @@ -13,6 +13,7 @@ use strict; use File::Copy; # For move() and copy() use File::Find; # For find() use File::Path qw(mkpath rmtree); # For rmtree() +use Cwd; use Cwd 'abs_path'; use Getopt::Long qw(:config pass_through); # pass_through so not confused by -DTYPE_STUFF @@ -29,6 +30,7 @@ my $incfonts; my $target_id; # passed in, not currently used my $rbdir; # can be non-.rockbox for special builds my $app; +my $mklinks; sub glob_mkdir { my ($dir) = @_; @@ -81,10 +83,16 @@ sub find_copyfile { print "find_copyfile: $pattern -> $destination\n" if $verbose; return sub { my $path = $_; + my $source = getcwd(); if ($path =~ $pattern && filesize($path) > 0 && !($path =~ /$rbdir/)) { - copy($path, $destination); - print "cp $path $destination\n" if $verbose; - chmod(0755, $destination.'/'.$path); + if($mklinks) { + print "link $path $destination\n" if $verbose; + symlink($source.'/'.$path, $destination.'/'.$path); + } else { + print "cp $path $destination\n" if $verbose; + copy($path, $destination); + chmod(0755, $destination.'/'.$path); + } } } } @@ -205,6 +213,7 @@ GetOptions ( 'r|root=s' => \$ROOT, 'v|verbose' => \$verbose, 'install=s' => \$install, # install destination 'rbdir:s' => \$rbdir, # If we want to put in a different directory + 'l|link' => \$mklinks, # If we want to create links instead of copying files ); # GetOptions() doesn't remove the params from @ARGV if their value was "" @@ -695,9 +704,15 @@ sub runone { } if($install) { - make_install(".rockbox", $install) or die "MKDIRFAILED\n"; - rmtree(".rockbox"); - print "rm .rockbox\n" if $verbose; + if($mklinks) { + my $cwd = getcwd(); + symlink("$cwd/.rockbox", "$install/.rockbox"); + print "link .rockbox $install\n" if $verbose; + } else { + make_install(".rockbox", $install) or die "MKDIRFAILED\n"; + rmtree(".rockbox"); + print "rm .rockbox\n" if $verbose; + } } else { unless (".rockbox" eq $rbdir) { diff --git a/tools/root.make b/tools/root.make index 885a80d2c6..cb7ab9620c 100644 --- a/tools/root.make +++ b/tools/root.make @@ -307,33 +307,38 @@ fullinstall: @echo "Installing a full setup in your '$(RBPREFIX)' dir" $(SILENT)$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -m "$(MODELNAME)" -i "$(TARGET_ID)" $(INSTALL) -z "zip -r0" -r "$(ROOTDIR)" --rbdir="$(RBDIR)" -f 2 $(TARGET) $(BINARY) +symlinkinstall: + @echo "Installing a full setup with links in your '$(RBPREFIX)' dir" + $(SILENT)$(TOOLSDIR)/buildzip.pl $(VERBOSEOPT) -m "$(MODELNAME)" -i "$(TARGET_ID)" $(INSTALL) -z "zip -r0" -r "$(ROOTDIR)" --rbdir="$(RBDIR)" -f 2 $(TARGET) $(BINARY) -l + help: @echo "A few helpful make targets" @echo "" - @echo "all - builds a full Rockbox (default), including tools" - @echo "bin - builds only the Rockbox.<target name> file" - @echo "rocks - builds only plugins" - @echo "codecs - builds only codecs" - @echo "dep - regenerates make dependency database" - @echo "clean - cleans a build directory (not tools)" - @echo "veryclean - cleans the build and tools directories" - @echo "manual - builds a manual (pdf)" - @echo "manual-html - HTML manual" - @echo "manual-zip - HTML manual (zipped)" - @echo "manual-txt - txt manual" - @echo "fullzip - creates a rockbox.zip of your build with fonts" - @echo "zip - creates a rockbox.zip of your build (no fonts)" - @echo "gzip - creates a rockbox.tar.gz of your build (no fonts)" - @echo "bzip2 - creates a rockbox.tar.bz2 of your build (no fonts)" - @echo "7zip - creates a rockbox.7z of your build (no fonts)" - @echo "fontzip - creates rockbox-fonts.zip" - @echo "mapzip - creates rockbox-maps.zip with all .map files" - @echo "tools - builds the tools only" - @echo "voice - creates the voice clips (voice builds only)" - @echo "voicetools - builds the voice tools only" - @echo "install - installs your build (at PREFIX, defaults to simdisk/ for simulators (no fonts))" - @echo "fullinstall - installs your build (like install, but with fonts)" - @echo "reconf - rerun configure with the same selection" + @echo "all - builds a full Rockbox (default), including tools" + @echo "bin - builds only the Rockbox.<target name> file" + @echo "rocks - builds only plugins" + @echo "codecs - builds only codecs" + @echo "dep - regenerates make dependency database" + @echo "clean - cleans a build directory (not tools)" + @echo "veryclean - cleans the build and tools directories" + @echo "manual - builds a manual (pdf)" + @echo "manual-html - HTML manual" + @echo "manual-zip - HTML manual (zipped)" + @echo "manual-txt - txt manual" + @echo "fullzip - creates a rockbox.zip of your build with fonts" + @echo "zip - creates a rockbox.zip of your build (no fonts)" + @echo "gzip - creates a rockbox.tar.gz of your build (no fonts)" + @echo "bzip2 - creates a rockbox.tar.bz2 of your build (no fonts)" + @echo "7zip - creates a rockbox.7z of your build (no fonts)" + @echo "fontzip - creates rockbox-fonts.zip" + @echo "mapzip - creates rockbox-maps.zip with all .map files" + @echo "tools - builds the tools only" + @echo "voice - creates the voice clips (voice builds only)" + @echo "voicetools - builds the voice tools only" + @echo "install - installs your build (at PREFIX, defaults to simdisk/ for simulators (no fonts))" + @echo "fullinstall - installs your build (like install, but with fonts)" + @echo "symlinkinstall - like fullinstall, but with links instead of copying files. (Good for developing on simulator)" + @echo "reconf - rerun configure with the same selection" ### general compile rules: |