Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
aix-pm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Gerhard Gonter
aix-pm
Commits
a460867f
Commit
a460867f
authored
2 years ago
by
Gerhard Gonter
Browse files
Options
Downloads
Patches
Plain Diff
moved mkdeb.pl from git repo "deb-pkg-hacks"
parent
0d4e200d
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
scripts/mkdeb.pl
+80
-0
80 additions, 0 deletions
scripts/mkdeb.pl
scripts/pmlnk.pl
+0
-399
0 additions, 399 deletions
scripts/pmlnk.pl
with
80 additions
and
399 deletions
scripts/mkdeb.pl
0 → 100755
+
80
−
0
View file @
a460867f
#!/usr/bin/perl
use
strict
;
my
$pkg_base
=
$ENV
{
PKGBASE
}
||
'
~/tmp/pkg
';
while
(
my
$arg
=
shift
(
@ARGV
))
{
mk_package_by_path
(
$arg
);
}
sub
mk_package_by_path
{
my
$arg
=
shift
;
my
@parts
=
split
('
/
',
$arg
);
my
$pkg_version
=
pop
(
@parts
);
my
$pkg_epoch
=
pop
(
@parts
);
my
$pkg_name
=
pop
(
@parts
);
my
$base
=
join
('
/
',
@parts
);
mk_package
(
$base
,
$pkg_name
,
$pkg_epoch
,
$pkg_version
);
}
sub
cmd
{
my
@c
=
@_
;
print
"
cmd: [
",
join
('
',
@c
),
"
]
\n
";
system
(
@c
);
}
sub
mk_package
{
my
$base
=
shift
;
my
$pkg_name
=
shift
;
my
$pkg_epoch
=
shift
;
my
$pkg_version
=
shift
;
my
$deb
=
'
../../../
'
.
$pkg_name
.
'
-
';
$deb
.=
$pkg_epoch
.
'
:
'
if
(
$pkg_epoch
>
0
);
$deb
.=
$pkg_version
.
'
.deb
';
print
__LINE__
,
"
deb=[
$deb
]
\n
";
chdir
(
$base
)
or
die
"
base not found [
$base
]
";
chdir
(
$pkg_name
)
or
die
"
pkg_name not found [
$pkg_name
]
";
chdir
(
$pkg_epoch
)
or
die
"
pkg_epoch not found [
$pkg_epoch
]
";
chdir
(
$pkg_version
)
or
die
"
pkg_version not found [
$pkg_version
]
";
# mk_md5sums();
unlink
('
control.tar.xz
');
unlink
('
data.tar.xz
');
cmd
("
(cd data && find [a-z]* -type f -print | xargs md5sum) >control/md5sums
");
cmd
('
(cd control && tar -cf ../control.tar .)
');
cmd
('
(cd data && tar -cf ../data.tar .)
');
cmd
(
qw(xz -zv control.tar data.tar)
);
# the ar file must contain these fils in this order
cmd
('
ar
',
'
rcSv
',
$deb
,
'
debian-binary
');
cmd
('
ar
',
'
rcSv
',
$deb
,
'
control.tar.xz
');
cmd
('
ar
',
'
rcSv
',
$deb
,
'
data.tar.xz
');
chdir
('
..
');
chdir
('
..
');
chdir
('
..
');
}
sub
mk_md5sums
{
# my $dir= shift;
# my $ddir= join('/', $dir, 'data');
# chdir('data') or die;
cmd
("
(cd data && find [a-z]* -type f -print | xargs md5sum) >control/md5sums
");
# chdir('..');
}
This diff is collapsed.
Click to expand it.
scripts/pmlnk.pl
deleted
100755 → 0
+
0
−
399
View file @
0d4e200d
#!/usr/bin/perl
=head1 NAME
pmlnk -- Perl Module Link
=cut
use
strict
;
package
pmlnk
;
use
Data::
Dumper
;
$
Data::Dumper::
Indent
=
1
;
__PACKAGE__
->
main
()
unless
caller
();
sub
main
{
# print __LINE__, " caller: ", join(' ', caller()), "\n";
my
@dirs
=
();
my
$target
;
my
$pkg_list
;
my
%par
=
(
op_mode
=>
'
link
'
);
while
(
my
$arg
=
shift
(
@ARGV
))
{
# print __LINE__, " arg=[$arg]\n";
if
(
$arg
eq
'
--
')
{
push
(
@dirs
,
@ARGV
);
@ARGV
=
();
}
elsif
(
$arg
=~
/^--(.+)/
)
{
my
(
$opt
,
$val
)
=
split
('
=
',
$
1
,
2
);
if
(
$opt
eq
'
help
')
{
usage
();
}
elsif
(
$opt
eq
'
copy
')
{
$par
{
op_mode
}
=
'
copy
';
}
elsif
(
$opt
eq
'
force
'
||
$opt
eq
'
overwrite
')
{
$par
{
force
}
=
1
;
}
elsif
(
$opt
eq
'
link
')
{
$par
{
op_mode
}
=
'
link
';
}
elsif
(
$opt
eq
'
packages
')
{
$pkg_list
=
shift
(
@ARGV
);
}
elsif
(
$opt
eq
'
target
')
{
$target
=
shift
(
@ARGV
);
}
else
{
usage
();
}
}
elsif
(
$arg
=~
/^-(.+)/
)
{
foreach
my
$opt
(
split
('',
$
1
))
{
if
(
$opt
eq
'
h
')
{
usage
();
exit
(
0
);
}
# elsif ($opt eq 'x') { $x_flag= 1; }
else
{
usage
();
}
}
}
else
{
push
(
@dirs
,
$arg
);
}
}
push
(
@dirs
,
'
.
')
unless
(
@dirs
);
$par
{
pkg_list
}
=
read_items
(
$pkg_list
)
if
(
defined
(
$pkg_list
));
my
$pmlnk
=
pmlnk
->
new
(
%par
);
# print __LINE__, " dirs: ", join(' ', @dirs), "\n";
foreach
my
$dir
(
@dirs
)
{
# print __LINE__, " dir=[$dir]\n";
my
$pm_files
=
$pmlnk
->
find_modules
(
$dir
,
'
pm
');
# print __LINE__, " pm_files: ", join(' ', @$pm_files), "\n";
$pmlnk
->
check_module_list
(
@$pm_files
);
}
if
(
defined
(
$target
))
{
$pmlnk
->
make_links_or_copies
(
$target
)
}
else
{
print
__LINE__
,
"
pmlnk:
",
Dumper
(
$pmlnk
);
}
}
sub
usage
{
system
(
$
0
);
}
sub
new
{
my
$class
=
shift
;
my
$self
=
{
@
_
,
files
=>
[]
,
modules
=>
[]
,
};
bless
$self
,
$class
;
# print __LINE__, " self: ", Dumper($self); exit;
}
sub
find_modules
{
my
$self
=
shift
;
my
$path
=
shift
;
my
$extension
=
shift
||
'
pm
';
my
@dirs
=
(
$path
);
my
$files
=
$self
->
{
files
};
my
@new_files
=
();
DIR:
while
(
my
$dir
=
shift
(
@dirs
))
{
unless
(
$dir
=~
m#^/#
)
{
$dir
=
undef
if
(
$dir
eq
'
.
');
while
(
$dir
=~
s#^\.\/##
)
{}
die
"
don't do that [
$dir
]
"
if
(
$dir
eq
'
..
'
||
$dir
=~
m#^\.\.\/#
);
my
$pwd
=
`
pwd
`;
chop
(
$pwd
);
$dir
=
(
defined
(
$dir
)
&&
$dir
ne
'')
?
join
('
/
',
$pwd
,
$dir
)
:
$pwd
;
}
opendir
(
DIR
,
$dir
)
or
die
;
# print __LINE__, " reading dir [$dir]\n";
ENTRY:
while
(
my
$e
=
readdir
(
DIR
))
{
next
ENTRY
if
(
$e
eq
'
.
'
||
$e
eq
'
..
');
next
ENTRY
if
(
$e
eq
'
.git
'
||
$e
eq
'
.svn
'
||
$e
eq
'
CVS
');
my
$fp
=
join
('
/
',
$dir
,
$e
);
# print __LINE__, " e=[$e] fp=[$fp]\n";
# my @st= stat($fp);
if
(
-
d
$fp
)
{
push
(
@dirs
,
$fp
);
}
elsif
(
-
f
$fp
)
{
my
@e
=
split
(
/\./
,
$e
);
my
$ext
=
pop
(
@e
);
# print __LINE__, " e=[$e] ext=[$ext]\n";
if
(
$ext
eq
$extension
)
{
push
(
@$files
,
$fp
);
push
(
@new_files
,
$fp
);
}
}
}
closedir
(
DIR
);
}
(
wantarray
)
?
@new_files
:
\
@new_files
;
}
sub
check_module_list
{
my
$self
=
shift
;
my
@pm_files
=
@_
;
my
$modules
=
$self
->
{
modules
};
foreach
my
$pm_file
(
@pm_files
)
{
my
$info
=
$self
->
check_module
(
$pm_file
);
# print __LINE__, " pm_file=[$pm_file] info: ", Dumper($info);
push
(
@$modules
,
$info
);
}
}
sub
check_module
{
my
$self
=
shift
;
my
$fnm
=
shift
;
open
(
F
,
'
<:utf8
',
$fnm
)
or
die
;
my
@packages
=
();
my
@uses
=
();
while
(
<
F
>
)
{
chop
;
push
(
@packages
,
$
1
)
if
(
m#^\s*package\s*([\w\d:_]+)[\(\); ]#
);
push
(
@uses
,
$
1
)
if
(
m#^\s*use\s*([\w\d:_]+)[\(\); ]#
);
}
close
(
F
);
my
$info
=
{
filename
=>
$fnm
,
packages
=>
\
@packages
,
uses
=>
\
@uses
,
};
# find out, which package name matches filename
my
@fnm
=
reverse
split
(
/\//
,
$fnm
);
foreach
my
$pkg
(
@packages
)
{
next
if
(
$pkg
eq
'
strict
'
||
$pkg
eq
'
warnings
');
my
@pkg
=
reverse
split
('
::
',
$pkg
);
$pkg
[
0
]
.=
'
.pm
';
# print __LINE__, " pkg=[$pkg] pkg-list: ", join(' ', @pkg), "\n";
my
$match
=
1
;
M:
for
(
my
$i
=
0
;
$i
<=
$#pkg
;
$i
++
)
{
if
(
$pkg
[
$i
]
ne
$fnm
[
$i
])
{
$match
=
0
;
last
M
;
}
}
if
(
$match
)
{
# print __LINE__, " match: $fnm == $pkg\n";
$info
->
{
matching_package_name
}
=
$pkg
;
}
}
$info
;
}
sub
make_links_or_copies
{
my
$self
=
shift
;
my
$target
=
shift
;
# create target path
{
my
@target
=
split
('
/
',
$target
);
my
@new_target
;
foreach
my
$t
(
@target
)
{
next
if
(
$t
eq
'
.
');
if
(
$t
eq
'
..
')
{
# TODO: maybe we should care for an empty directory in the target
pop
(
@new_target
);
next
;
}
push
(
@new_target
,
$t
);
mk_dir
(
join
('
/
',
@new_target
));
}
$target
=
join
('
/
',
@new_target
);
}
my
$op_mode
=
(
$self
->
{
op_mode
}
eq
'
copy
')
?
1
:
0
;
my
$force
=
(
exists
(
$self
->
{
force
})
&&
$self
->
{
force
})
?
1
:
0
;
my
$check_package_list
=
0
;
my
%pkg_list
;
if
(
exists
(
$self
->
{
pkg_list
}))
{
my
@pkg_list
=
@
{
$self
->
{
pkg_list
}};
die
"
empty package list!
"
unless
(
@pkg_list
);
%pkg_list
=
map
{
$_
=>
1
}
@pkg_list
;
$check_package_list
=
1
;
}
my
$modules
=
$self
->
{
modules
};
MODULE:
foreach
my
$module
(
@$modules
)
{
# print __LINE__, " module: ", Dumper($module);
my
$pkg_name
=
$module
->
{
matching_package_name
};
unless
(
$pkg_name
)
{
print
"
ATTN: no matching_package_name detected!
\n
";
print
__LINE__
,
"
module:
",
Dumper
(
$module
);
next
MODULE
;
}
next
if
(
$check_package_list
&&
!
$pkg_list
{
$pkg_name
});
my
@pkg_name
=
split
('
::
',
$pkg_name
);
my
$module_name
=
pop
(
@pkg_name
);
my
$t_path
=
$target
;
while
(
my
$t_dir
=
shift
(
@pkg_name
))
{
$t_path
.=
'
/
'
.
$t_dir
;
mk_dir
(
$t_path
);
}
$t_path
.=
'
/
'
.
$module_name
.
'
.pm
';
if
(
$op_mode
)
{
mk_copy
(
$module
->
{
filename
},
$t_path
,
$force
);
}
else
{
mk_link
(
$module
->
{
filename
},
$t_path
,
$force
);
}
}
}
=head1 Internal Functions
=head2 mk_dir($path)
=cut
sub
mk_dir
{
my
$path
=
shift
;
if
(
$path
&&
!-
d
$path
)
{
print
"
creating [
$path
]
\n
";
mkdir
(
$path
);
}
}
sub
mk_link
{
my
$src
=
shift
;
my
$dst
=
shift
;
my
$force
=
shift
;
if
(
-
l
$dst
)
{
my
$lnk
=
readlink
(
$dst
);
if
(
$src
eq
$lnk
)
{
}
# ignore, that's the same thing
else
{
print
"
different symlink already exists
\n
";
print
"
dst=[
$dst
]
\n
";
print
"
src=[
$src
]
\n
";
print
"
lnk=[
$lnk
]
\n
";
if
(
$force
)
{
unlink
(
$dst
);
goto
LINK
;
}
}
}
elsif
(
-
f
$dst
)
{
print
"
ATTN: symlink [
$dst
] already exists as file!
\n
";
if
(
$force
)
{
unlink
(
$dst
);
goto
LINK
;
}
}
else
{
LINK:
print
"
symlinking
$dst
->
$src
\n
";
symlink
(
$src
,
$dst
);
}
}
sub
mk_copy
{
my
$src
=
shift
;
my
$dst
=
shift
;
my
$force
=
shift
;
if
(
-
l
$dst
)
{
my
$lnk
=
readlink
(
$dst
);
print
"
ATTN: exists as symlink:
\n
";
print
"
lnk=[
$lnk
]
\n
";
if
(
$force
)
{
unlink
(
$dst
);
goto
COPY
;
}
}
elsif
(
-
f
$dst
)
{
print
"
ATTN: file [
$dst
] already exists!
\n
";
goto
COPY
if
(
$force
);
}
else
{
COPY:
print
"
copying
$src
to
$dst
\n
";
copy_file
(
$src
,
$dst
);
}
}
sub
copy_file
{
my
$src
=
shift
;
my
$dst
=
shift
;
open
(
FI
,
'
<:raw
',
$src
)
or
die
"
can't read source [
$src
]
";
open
(
FO
,
'
>:raw
',
$dst
)
or
die
"
can't write to destination [
$dst
]
";
my
$buffer
;
while
(
1
)
{
my
$cnt
=
sysread
(
FI
,
$buffer
,
64
*
1024
);
last
unless
(
$cnt
>
0
);
syswrite
(
FO
,
$buffer
);
}
close
(
FO
);
close
(
FI
);
}
sub
read_items
{
my
$fnm
=
shift
;
open
(
FI
,
'
<:utf8
',
$fnm
)
or
die
"
can't read item list [
$fnm
]
";
my
@list
;
while
(
<
FI
>
)
{
chop
;
next
if
(
m/^#/
||
m/^\s*$/
);
push
(
@list
,
$_
);
}
close
(
FI
);
\
@list
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment