Skip to content

Commit

Permalink
(puppetlabs#8660) Fix destdir option on Windows
Browse files Browse the repository at this point in the history
Specifying the --destdir option failed on windows because the install
script attempted to concatenate two absolute paths together. On Unix,
this is fine, but on Windows, it fails because the colon (part of the
drive specifier) is not a valid filename character. This commit adds a
method to join two paths, stripping off the drive specifier, if
present.

Also fixed a minor bug, which caused a deprecation warning to always
be printed when the --destdir option is omitted, which is the default
case.

Reviewed-by: Cameron Thomas <[email protected]>
(cherry picked from commit f600617)
  • Loading branch information
joshcooper authored and jhelwig committed Aug 19, 2011
1 parent 088c7ac commit 328eaa2
Showing 1 changed file with 16 additions and 6 deletions.
22 changes: 16 additions & 6 deletions install.rb
Original file line number Diff line number Diff line change
Expand Up @@ -286,18 +286,18 @@ def prepare_installation
if not InstallOptions.destdir.nil?
destdir = InstallOptions.destdir
# To be deprecated once people move over to using --destdir option
elsif ENV['DESTDIR'] != nil?
elsif not ENV['DESTDIR'].nil?
destdir = ENV['DESTDIR']
warn "DESTDIR is deprecated. Use --destdir instead."
else
destdir = ''
end

configdir = "#{destdir}#{configdir}"
bindir = "#{destdir}#{bindir}"
sbindir = "#{destdir}#{sbindir}"
mandir = "#{destdir}#{mandir}"
sitelibdir = "#{destdir}#{sitelibdir}"
configdir = join(destdir, configdir)
bindir = join(destdir, bindir)
sbindir = join(destdir, sbindir)
mandir = join(destdir, mandir)
sitelibdir = join(destdir, sitelibdir)

FileUtils.makedirs(configdir) if InstallOptions.configs
FileUtils.makedirs(bindir)
Expand All @@ -316,6 +316,16 @@ def prepare_installation
InstallOptions.man_dir = mandir
end

##
# Join two paths. On Windows, dir must be converted to a relative path,
# by stripping the drive letter, but only if the basedir is not empty.
#
def join(basedir, dir)
return "#{basedir}#{dir[2..-1]}" if $operatingsystem == "windows" and basedir.length > 0 and dir.length > 2

"#{basedir}#{dir}"
end

##
# Build the rdoc documentation. Also, try to build the RI documentation.
#
Expand Down

0 comments on commit 328eaa2

Please sign in to comment.