Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
dune-common
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package 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
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Core Modules
dune-common
Commits
806f6415
Commit
806f6415
authored
16 years ago
by
Christian Engwer
Browse files
Options
Downloads
Patches
Plain Diff
support version constraints for dependencies in dunecontrol
[[Imported from SVN: r5317]]
parent
d0e82dcd
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
bin/dunemodules.inc
+55
-12
55 additions, 12 deletions
bin/dunemodules.inc
bin/test-version-compare
+32
-0
32 additions, 0 deletions
bin/test-version-compare
with
87 additions
and
12 deletions
bin/dunemodules.inc
+
55
−
12
View file @
806f6415
...
...
@@ -8,6 +8,9 @@
# name of the "control" files
CONTROL
=
"dune.module"
# pattern needed to parse the Suggests and Depnds entries
PARSE_SUGDEP_PATTERN
=
'^ *\([^ ^:]\{1,\}\) *\(([^)]*)\)\{0,1\},\{0,1\} *\(.*\)$'
###############################################
###
### check for environment variables
...
...
@@ -167,18 +170,30 @@ sort_modules() {
sort_dependencies() {
# reset list
export
SORTEDMODULES
=
""
local
deps
=
""
local
name
=
""
local
dep
=
""
local
ver
=
""
local
xdeps
=
""
# handle each modules passed as parameter
for
m
in
"$@"
;
do
# did we find a module file for this mopdule?
if
test
"x$(eval echo
\$
HAVE_
$m
)"
!=
"x"
;
then
if
test
"x$(eval echo
\$
DEPS_
$m
)"
!=
"x"
;
then
for
name
in
$
(
eval
echo
\
$DEPS_$m
);
do
dep
=
$
(
fix_variable_name
$name
)
_sort_module
$dep
done
fi
eval
deps
=
\
$DEPS_$m
while
test
-
n
"
$deps
"
;
do
PATTERN
=
$PARSE_SUGDEP_PATTERN
name
=
`echo $deps | sed -e "s/$PATTERN/\1/"`
xdeps
=
`echo $deps | sed -e "s/$PATTERN/\3/"`
if
test
"
$deps
"
=
"
$xdeps
"
;
then
eval
echo
ERROR
:
parsing
dependency
string
\
$DEPS_$m
>&
2
exit
1
fi
deps
=
$xdeps
dep
=
`fix_variable_name $name`
_sort_module
$dep
done
else
echo
"
ERROR: could not find module
$(eval echo
\$
NAME_
$m
)"
>&
2
eval
echo
ERROR
:
could
not
find
module
\
$NAME_$m
>&
2
exit
1
fi
done
...
...
@@ -246,6 +261,14 @@ sort_suggestions() {
#
_sort_module() {
local
module
=
"$1"
local
modname
=
""
eval
modname
=
\
$NAME_$module
local
deps
=
""
local
name
=
""
local
dep
=
""
local
ver
=
""
local
depver
=
""
local
xdeps
=
""
shift
1
if
!
check_modname
$module
;
then
echo
"ERROR: invalid module name
$module
"
>&
2
...
...
@@ -253,22 +276,39 @@ _sort_module() {
fi
if
test
"x$(eval echo
\$
SORT_DONE_${module})"
!=
"xyes"
;
then
# resolve dependencies
for
name
in
$
(
eval
"echo
\$
DEPS_
$module
"
);
do
eval
deps
=
\
$DEPS_$module
while
test
-
n
"
$deps
"
;
do
PATTERN
=
$PARSE_SUGDEP_PATTERN
name
=
`echo $deps | sed -e "s/$PATTERN/\1/"`
depver
=
`echo $deps | sed -e "s/$PATTERN/\2/" -e 's/[()]//g'`
xdeps
=
`echo $deps | sed -e "s/$PATTERN/\3/"`
if
test
"
$deps
"
=
"
$xdeps
"
;
then
echo
"ERROR: parsing dependencies for
$modname
"
>&
2
exit
1
fi
deps
=
"
$xdeps
"
dep
=
$
(
fix_variable_name
$name
)
if
!
check_modname
$dep
;
then
echo
"ERROR: invalid module name
$name
"
>&
2
exit
1
fi
if
test
"x$(eval echo
\$
HAVE_
$dep
)"
!=
"x"
;
then
eval
ver
=
\
$VERS_$dep
if
!
check_version
"
$ver
"
"
$depver
"
;
then
echo
"ERROR: version mismatch."
>&
2
echo
"
$modname
requires
$name
$depver
,"
>&
2
echo
" but only
$name
=
$ver
available."
>&
2
exit
1
fi
_sort_module
$dep
else
# perhaps this module is installed,
# then it should be handled via pkg-config
if
!
pkg
-
config
$name
;
then
echo
"ERROR: could not find module $
(eval echo
\$
NAME_
$dep
)
"
>&
2
echo
" module is also unknown to pkg-config"
>&
2
echo
"ERROR: could not find module
$
name
,
"
>&
2
echo
" module is also unknown to pkg-config
.
"
>&
2
echo
" Maybe you need to adjust PKG_CONFIG_PATH!"
>&
2
echo
" $
(eval echo
\$
NAME_
$dep
) is required by $(eval echo
\$
NAME_
$module
)
"
>&
2
echo
"
$
name
is required by
$modname
"
>&
2
exit
1
fi
fi
...
...
@@ -414,6 +454,9 @@ compare_sub_version() {
}
check_version
()
{
if
test
-
z
"$2"
;
then
# if no constraint is given, check_version is true
return
0
fi
local
v
=
$
1
local
PATTERN
=
"^ *\([<>=]*\) *\([0-9.]*\)\(.*\)$"
if
test
x
!=
`echo "$2" | sed -e "s/$PATTERN/x/"`
;
then
...
...
@@ -448,4 +491,4 @@ check_version() {
return
0
fi
return
1
}
\ No newline at end of file
}
This diff is collapsed.
Click to expand it.
bin/test-version-compare
+
32
−
0
View file @
806f6415
#!/bin/bash
set
-e
###############################################
###
### read lib
...
...
@@ -100,3 +102,33 @@ test_version_check "1.2.3" "> 1.2"
test_version_check
"1.2.3"
"= 1.2"
test_version_check
"1.2.3"
"< 1.2"
check_pattern
()
{
PATTERN
=
$PARSE_SUGDEP_PATTERN
}
parse_version
()
{
local
deps
=
"
$1
"
local
name
=
""
local
dep
=
""
local
xdeps
=
""
echo
start:
$deps
while
test
-n
"
$deps
"
;
do
PATTERN
=
$PARSE_SUGDEP_PATTERN
name
=
`
echo
$deps
|
sed
-e
"s/
$PATTERN
/
\1
/"
`
ver
=
`
echo
$deps
|
sed
-e
"s/
$PATTERN
/
\2
/"
-e
's/[()]//g'
`
xdeps
=
`
echo
$deps
|
sed
-e
"s/
$PATTERN
/
\3
/"
`
if
test
"
$deps
"
=
"
$xdeps
"
;
then
echo
Error parsing dependency string
\"
$1
\"
exit
1
fi
deps
=
$xdeps
echo
$name
version
$ver
...
$deps
done
echo
done
}
parse_version
"dune-common (>= 1.2), dune-istl (<999)"
parse_version
"alf (12) bart()c"
parse_version
"a b () c"
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