| #!/usr/bin/perl -w |
| #Licensed to the Apache Software Foundation (ASF) under one |
| #or more contributor license agreements. See the NOTICE file |
| #distributed with this work for additional information |
| #regarding copyright ownership. The ASF licenses this file |
| #to you under the Apache License, Version 2.0 (the |
| #"License"); you may not use this file except in compliance |
| #with the License. You may obtain a copy of the License at |
| # |
| #http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| #Unless required by applicable law or agreed to in writing, |
| #software distributed under the License is distributed on an |
| #"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| #KIND, either express or implied. See the License for the |
| #specific language governing permissions and limitations |
| #under the License. |
| |
| use strict; |
| use warnings; |
| |
| use Data::Dumper; |
| use File::Copy; |
| |
| my %dirs; |
| |
| my %bases = ( |
| 'ofbiz' => 'debian/ofbiz', |
| 'specialpurpose' => 'debian/ofbiz-specialpurpose', |
| ); |
| |
| my $appDirsRe = qw/(applications|framework|specialpurpose)/; |
| my @ignore = qw( |
| OPTIONAL_LIBRARIES |
| NOTICE |
| ant |
| LICENSE |
| hot-deploy/README.txt |
| .project |
| applications/accounting/lib/README |
| applications/content/lib/uno/README |
| applications/content/index/indexhere.txt |
| ant.bat |
| stopofbiz.sh |
| startofbiz.bat |
| framework/example/lib/lib.txt |
| framework/example/webapp/webapp.txt |
| framework/logs/README |
| framework/images/webapp/images/catalog/dirholder.txt |
| framework/appserver/README |
| framework/shark/lib/README |
| framework/data/README |
| README |
| .classpath |
| ij.ofbiz |
| KEYS |
| APACHE2_HEADER |
| rc.ofbiz |
| rc.ofbiz.for.debian |
| ); |
| #startofbiz.sh |
| |
| my %ignore = map({$_ => 1} @ignore); |
| |
| my @unknown; |
| my %scripts; |
| |
| sub basename($) { |
| my $target = $_[0]; |
| $target =~ s,/[^/]+$,,; |
| return $target; |
| } |
| |
| sub _mkdir($) { |
| return mkdir($_[0]) || !system('mkdir', '-p', $_[0]); |
| } |
| |
| sub copylink($$$) { |
| my ($base, $destdir, $file) = @_; |
| my $target = "$base$destdir/$file"; |
| #print("Symlinking ($file) ($target)\n"); |
| if (-f $file) { |
| _mkdir(basename($target)) || die("a"); |
| link($file, $target) || die("b"); |
| } else { |
| _mkdir($target) || die("c"); |
| } |
| my $symlink = "$base/usr/share/ofbiz/$file"; |
| _mkdir(basename($symlink)); |
| symlink("$destdir/$file", $symlink) || die("f: $symlink: $!"); |
| } |
| system('rm', '-rf', 'debian/ofbiz', 'debian/ofbiz-specialpurpose'); |
| |
| open(FIND, '-|', qw(find -not -path */.git/* -not -name .gitignore -printf %P\0)) || die("Couldn't run find"); |
| $/ = "\0"; |
| while (<FIND>) { |
| chomp; |
| #print("{$_}\n"); |
| next if (m,^debian/,); |
| next if (exists($ignore{$_})); |
| # next if (m,^(LICENSE|NOTICE|OPTIONAL_LIBRARIES|ant(\.bat)?|\.(project|classpath)|(stop|start)ofbiz\.sh|startofbiz\.bat|(ij|rc)\.ofbiz)$,); |
| next if (m,(^|.*/)build\.xml$,); |
| #print("1\n"); |
| next if (m,^$appDirsRe/[^/]+/(build/classes|src|testdef)/.*,); |
| next if (m,^$appDirsRe/[^/]+/build/lib/[^/]+-test\.jar$,); |
| next if (m,^runtime/(catalina/work|data/derby|logs)/.*,); |
| next if (m,^framework/appserver/templates(|/.*)$,); |
| next if (m,^\.(hg|pc)(|/.*),); |
| #print("2\n"); |
| my $type = undef; |
| if ($_ eq 'framework/entity/config/entityengine.xml') { |
| $type = 'ucf'; |
| } elsif (-f m,(^|.*/)[^/]+\.css$,) { |
| $type = 'conffile'; |
| } elsif (m,^$appDirsRe/[^/]+/webapp/.*/WEB-INF/(controller|web|regions)\.xml$,) { |
| $type = 'conffile'; |
| } elsif ($_ eq 'specialpurpose/assetmaint/webapp/assetmaint/WEB-INF/facility-controller.xml') { |
| $type = 'conffile'; |
| } elsif ($_ eq 'runtime/data/derby.properties') { |
| $type = 'conffile'; |
| } elsif (m,^$appDirsRe/[^/]+/email/[^/]+/[^/]+\.ftl$,) { |
| $type = 'conffile'; |
| } elsif (m,^$appDirsRe/[^/]+/data/[^/]+\.xml$,) { |
| $type = 'conffile'; |
| } elsif (m,^$appDirsRe/[^/]+/ofbiz-component\.xml$,) { |
| $type = 'conffile'; |
| } elsif (m,^$appDirsRe/component-load\.xml$,) { |
| $type = 'conffile'; |
| } elsif (-f && m,^$appDirsRe/[^/]+/servicedef/services.*\.xml$,) { |
| $type = 'conffile'; |
| } elsif (-f && m,^$appDirsRe/[^/]+/(dtd|entitydef|script|servicedef|widget)/.*$,) { |
| $type = 'code'; |
| } elsif (m,^$appDirsRe/[^/]+/webapp/.*/[^/]+(\.(bsh|ftl|jsp|gif|htc|ico|jar|jpg|js|png)|(Forms?|Menus)\.xml)$,) { |
| $type = 'code'; |
| } elsif (m,^$appDirsRe/[^/]+/webapp/.*/WEB-INF/[^/]+\.tld$,) { |
| $type = 'code'; |
| } elsif (-f && m,^$appDirsRe/[^/]+/(config|templates|fieldtype)/.*$,) { |
| $type = 'conffile'; |
| } elsif (m,^$appDirsRe/[^/]+/(build/lib/[^/]+\.jar|lib/.*\.jar)$,) { |
| $type = 'code'; |
| } elsif (m,^framework/common/webcommon/.*\.ftl$,) { |
| $type = 'code'; |
| } elsif (-f && m,^specialpurpose/pos/screens/.*$,) { |
| $type = 'code'; |
| } elsif ($_ eq 'startofbiz.sh') { |
| $type = 'conffile'; |
| } elsif ($_ eq 'applications/content/template/survey/genericsurvey.ftl') { |
| $type = 'code'; |
| } elsif ($_ eq 'ofbiz.jar') { |
| $type = 'code'; |
| } elsif (-f && m,^runtime/(logs|catalina|data)/README$,) { |
| next; |
| } elsif ($_ eq 'runtime/catalina/catalina-users.xml') { |
| $type = 'varlib'; |
| } elsif (m,^runtime/catalina/[^/]+$,) { |
| $type = 'varcache'; |
| } elsif (-d && $_ eq 'runtime/logs') { |
| $type = 'varlog'; |
| } elsif (m,^runtime/logs/.*$,) { |
| next; |
| } elsif (-d && m,^runtime/tmp$,) { |
| $type = 'varlib'; |
| } elsif (m,^runtime/(data|output)/.*$,) { |
| $type = 'varlib'; |
| } elsif (-f) { |
| $type = 'code'; |
| } elsif ($_ eq 'rc.ofbiz.for.debian') { |
| next; |
| } else { |
| next; |
| } |
| my $pkg; |
| if (m,^specialpurpose/.*,) { |
| $pkg = 'ofbiz-specialpurpose'; |
| } elsif (m,^applications/.*,) { |
| $pkg = 'ofbiz-applications'; |
| } else { |
| $pkg = 'ofbiz-framework'; |
| } |
| my $base = 'debian/' . $pkg; |
| my $file = $_; |
| print(STDERR "$type: $file\n") if ($file =~ m/^.*runtime.*/); |
| if ($type eq 'code') { |
| my $target = "$base/usr/share/ofbiz/$file"; |
| #print("Copying ($file) ($target)\n"); |
| _mkdir(basename($target)) || die("1"); |
| link($file, $target) || die("2"); |
| } elsif ($type eq 'conffile') { # && $file =~ m,^.*/(ofbiz-component|component-load|data/.*)\.xml$,) { |
| copylink($base, '/etc/ofbiz', $file); |
| } elsif ($type eq 'ucf') { |
| copylink($base, '/etc/ofbiz', $file); |
| _mkdir(basename("$base/usr/share/ofbiz/ucf/$file")); |
| rename("$base/etc/ofbiz/$file", "$base/usr/share/ofbiz/ucf/$file"); |
| my $postinst = <<_EOF_; |
| trap 'rm -f "\$tmpconffile"' EXIT |
| tmpconffile=`tempfile -m 644` |
| munge_conffile "\$tmpconffile" "$file" |
| ucf --debconf-ok "\$tmpconffile" /etc/ofbiz/$file |
| ucfr ofbiz /etc/ofbiz/$file |
| rm -f "\$tmpconffile" |
| trap '' EXIT |
| _EOF_ |
| push(@{$scripts{$pkg}->{'postinst'}->{'configure'}}, $postinst); |
| my $postrm = <<_EOF_; |
| for ext in '~' '%' .bak .dpkg-tmp .dpkg-new .dpkg-old .dpkg-dist; do rm -f /etc/ofbiz/$file\$ext; done |
| rm -f /etc/ofbiz/$file |
| if which ucf >/dev/null; then ucf --debconf-ok --purge /etc/ofbiz/$file; fi |
| if which ucfr >/dev/null; then ucfr --purge ofbiz /etc/ofbiz/$file; fi |
| _EOF_ |
| push(@{$scripts{$pkg}->{'postrm'}->{'purge'}}, $postrm); |
| } elsif ($type =~ m/^var(cache|lib|log|tmp)$/) { |
| my $new = "/var/$1/ofbiz"; |
| copylink($base, $new, $file); |
| my $postrm = <<_EOF_; |
| if dpkg-statoverride --list "$new/$file" > /dev/null; then dpkg-statoverride --remove "$new/$file"; fi |
| rm -rf "$new/$file" |
| _EOF_ |
| push(@{$scripts{$pkg}->{'postrm'}->{'purge'}}, $postrm); |
| my $postinst = <<_EOF_; |
| if ! dpkg-statoverride --list "$new/$file" > /dev/null; then |
| dpkg-statoverride --add ofbiz ofbiz 2775 "$new/$file" |
| chown ofbiz:ofbiz "$new/$file" |
| chmod 2755 "$new/$file" |
| fi |
| _EOF_ |
| push(@{$scripts{$pkg}->{'postinst'}->{'configure'}}, $postinst); |
| } else { |
| die("Unknown type($type) on file($file)"); |
| } |
| } |
| |
| |
| close(FIND); |
| my $postinst = ''; |
| push(@{$scripts{'ofbiz-framework'}->{'postinst'}->{'configure'}}, $postinst); |
| foreach my $pkg (keys(%scripts)) { |
| foreach my $script (keys(%{$scripts{$pkg}})) { |
| open(SCRIPT, ">> debian/$pkg.$script.debhelper"); |
| print(SCRIPT "case \"\$1\" in\n"); |
| my $segments = $scripts{$pkg}->{$script}; |
| foreach my $arg (keys(%$segments)) { |
| my $label = $arg; |
| if ($label eq 'configure') { |
| print(SCRIPT "\t(reconfigure|configure)\n"); |
| } elsif ($arg =~ m/[\s|]/) { |
| print(SCRIPT "\t(\"$arg\")\n"); |
| } else { |
| print(SCRIPT "\t($arg)\n"); |
| } |
| print(SCRIPT join('', map("\t\t$_\n", split(/\n/, join("\n", @{$segments->{$arg}}))))); |
| print(SCRIPT "\t;;\n"); |
| } |
| print(SCRIPT "esac\n"); |
| close(SCRIPT); |
| } |
| } |
| print(join('', map("$_\n", @unknown))); |