You are not logged in.
WARNING DON"T USE THIS EXAMPLE FOR YOUR PKGBUILD - qinohe
Hi, looking for a solution of the next example.
The 2nd echo part should stay as it is..
As I'm looking at it for days now already, tried some things,
for loop, if statement, but I can't get it to work.
The variable, 'wow', could be 'yes', as well as ,'no'
I think,it's the part between the lines, I'm missing.
Can someone point me in the right direction?
If I invoke the script, and choose e.g. ,aa & cc, the output should be,
yesandaa
noandbb
yesandcc
noanddd
#!/bin/bash
set -u
set -e
hit=$(hit 2>/dev/null) || hit=/tmp/hit
trap 'rm -f "$hit"' 0 1 2 5 15
DIALOG=${DIALOG=dialog}
$DIALOG --backtitle "" \
--title "" --clear \
--checklist "" 11 30 5 \
"aa" "" on \
"bb" "" on \
"cc" "" on \
"dd" "" on 2>/tmp/hit;
retval=$?
HIT=$(cat "$hit")
case $retval in
0)
if [[ ! -f "$hit" ]]; then
echo "hit not found!, using hat."
fi
#------------------------------------
#------------------------------------
echo ''$wow'and'aa'
'$wow'and'bb'
'$wow'and'cc'
'$wow'and'dd''
;;
esac
exit 0
Thanks, qinohe
Last edited by qinohe (2014-06-01 16:48:51)
Offline
Offline
Alright then 'wow' doesn't get a value this way, i figured that one out already but how should I go about, doing that.
How could I make the script so, that 'wow' can have 2 values, without touching the 2nd echo part?
And thanks for your tips, why not to use 'set -e & u' in this thread.
Last edited by qinohe (2014-05-29 15:58:56)
Offline
Offline
Yeah, I'm so confused by your question.
Although the title of your thread made me think of Python:
#!/usr/bin/python3
both = 'blarg', 3
print(both)
Last edited by drcouzelis (2014-05-29 16:46:49)
Offline
qinohe wrote:How could I make the script so, that 'wow' can have 2 values, without touching the 2nd echo part?
It simply isn't possible.
Thanks,well thats sad, you know, I just created this script to simplify.
The thing I tried to do was using dialog to catch input on the'.configure part of a PKGBUILD.
Is it possible to do that in a different way then?, and is it useful to create this kind of inline scripts for a PKGBUILD?
Offline
Yeah, I'm so confused by your question.
Although the title of your thread made me think of Python:
#!/usr/bin/python3 both = 'blarg', 3 print(both)
, I understand you are confused, I was a little myself too..
See answer above your Q. #6
Last edited by qinohe (2014-05-29 16:51:56)
Offline
The thing I tried to do was using dialog to catch input on the'.configure part of a PKGBUILD.
Is it possible to do that in a different way then?, and is it useful to create this kind of inline scripts for a PKGBUILD?
No, please never do this. PKGBUILDs should not be interactive.
Last edited by falconindy (2014-05-29 17:18:10)
Offline
No, please never do this. PKGBUILDs should not be interactive.
I didn't know this, I promise, I won't submit interactive PKGBUILD's. Is there a reason why they shouldn't be interactive?
Problem solved, I guess if I want a script that gives me that output (see first code part #1), I try another route.
Thanks for your answers falconindy & drcouzelis.
Offline
They shouldn't be interactive because PKGBUILDs are for automatically building a package.
Offline
I've reread this thread several times - it seems to make less sense every time through. It's like reading a Dr Seuss book on acid.
qinohe - there are creative ways to approach nearly every problem, but at least for me it's not remotely clear what the problem is. Can you give simple examples of what kinds of outputs/results you are trying to produce from what kinds of inputs?
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
They shouldn't be interactive because PKGBUILDs are for automatically building a package.
Yeah, I understand that now, I just couldn't find anything saying that, except you people.
I've reread this thread several times - it seems to make less sense every time through. It's like reading a Dr Seuss book on acid.
qinohe - there are creative ways to approach nearly every problem, but at least for me it's not remotely clear what the problem is. Can you give simple examples of what kinds of outputs/results you are trying to produce from what kinds of inputs?
Haha, yeah, I think I'm discovering the boundaries of bash,.
Yes Trilby, I can explain what I was doing, it's not that complicated. Made a PKGBUILD for MOC svn version.
I know there is one, Mr.Elendig is maintaining that one, but mine, has less dependencies and will not be interactive anymore.
What I wanted, is to give more power to the user, in my build is a 'DIALOG' sound system part and a '.configure' part
So you could choose the things you want MOC to configure with, and I wanted to do that with DIALOG. This is the package I talk about.
Basically, you wouldn't have to change anything, just start 'makepkg'. I hope this makes more sense, thanks.
# Maintainer: qinohe\ed\gmail
pkgname=moc-svn-dev
pkgver=2546
pkgrel=1
pkgdesc="A MOC svn development version"
arch=('x86_64' 'armv6h')
url="http://moc.daper.net"
license=('GPL')
depends=('libltdl' 'file')
makedepends=('subversion')
optdepends=('curl: Tool for transferring data with URL syntax'
'faad2: Open source MPEG-4 and MPEG-2 AAC decoder'
'ffmpeg: Record, convert, stream audio and video.'
'flac: Free Lossless Audio Codec'
'jack: JACK audio support'
'taglib: Audio Meta-Data Library'
'libid3tag: ID3 tags, audio file data standard for MP3 files'
'libmad: Support MPEG-1, -2 & -2.5, like MP3'
'libmodplug: Libs. to play MOD files'
'libmpcdec: Libs.for Musepack, audio compression format'
'libtimidity: Software synthesizer, convert MIDI to PCM'
'libvorbis: Libs. for playing Ogg files'
'sidplay2: Play C64 (Commodore) mono & stereo file formats'
'speex: A Free Codec For Free Speech'
'wavpack: Hybrid Lossless Audio Compression')
provides=(moc)
conflicts=(moc)
options=('!libtool')
md5sums=('SKIP')
_svntrunk=svn://daper.net/moc/trunk
_svnmod=moc
build() {
cd "$srcdir"
msg "Connecting to SVN server...."
if [[ -d "$_svnmod/.svn" ]]; then
(cd "$_svnmod" && svn up -r "$pkgver")
else
svn co "$_svntrunk" --config-dir ./ -r "$pkgver" "$_svnmod"
fi
msg "SVN checkout done or server timeout"
msg "Starting build..."
rm -rf "$srcdir/$_svnmod-build"
svn export "$srcdir/$_svnmod" "$srcdir/$_svnmod-build"
cd "$srcdir/$_svnmod-build"
#-----------------THIS IS REMOVED---------------#
soundsys=$(soundsys 2>/dev/null) || soundsys=/tmp/soundsys
trap 'rm -f "$soundsys"' 0 1 2 5 15
DIALOG=${DIALOG=dialog}
$DIALOG --backtitle "Choose your soundsystem'." \
--title "Default soundsystem to be set?" --clear \
--radiolist "" 11 30 5 \
"alsa" "" off \
"jack" "" off \
"oss" "" off 2>/tmp/soundsys;
retval=$?
soundsystem=$(cat "$soundsys")
case $retval in
0)
if [[ ! -f "$soundsys" ]]; then
echo "soundsys not found, use generic"
fi
export CPPFLAGS="${CPPFLAGS} -I/usr/lib/$soundsystem/include"
esac
#-------------END---------------------#
autoreconf -i
./configure --prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/bin \
--enable-debug \
--without-aac \
--with-alsa \
--with-curl \
--with-ffmpeg \
--without-flac \
--without-jack \
--without-modplug \
--with-mp3 \
--without-musepack \
--without-oss \
--with-rcc \
--with-samplerate \
--without-sidplay2 \
--without-sndfile \
--without-speex \
--without-timidity \
--with-vorbis \
--with-wavpack
make
}
package() {
cd "$srcdir/$_svnmod-build"
make DESTDIR="$pkgdir/" install
}
# vim:set ts=2 sw=2 et:
BTW. mediawiki is always messing up the <code>, this is the same on my own wiki.
Offline
I still don't see where one variable having two values would come in. I just see an interactive PKGBUILD where the user would select a sounds system.
If they were able to chose more than one, the multiplle values could either be in an array or concatenated in a string and separated with spaces.
choices="alsa jack"
for choice in $choices; do
CPPFLAGS="${CPPFLAGS} -I/usr/lib/$choice/include"
done
## OR
choices=("alsa" "jack")
for choice in "${choices[@]}"; do
CPPFLAGS="${CPPFLAGS} -I/usr/lib/$choice/include"
done
Either of these would work just fine. I'm not sure whether it'd be best to store $DIALOG's output in an array or string as you haven't defined what DIALOG is - but that seems beside the point. This is not a limitation of bash: you can easily get multiple results and use all of them.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
I still don't see where one variable having two values would come in. I just see an interactive PKGBUILD where the user would select a sounds system.
No, it's not about soudsystem, that was in the build, and I removed that part. It's about the '.configure' part, I would like to be able to choose.
If you look back at #1, the second part should replace the configure part, though, it's not possible that way.
If they were able to chose more than one, the multiplle values could either be in an array or concatenated in a string and separated with spaces.
choices="alsa jack" for choice in $choices; do CPPFLAGS="${CPPFLAGS} -I/usr/lib/$choice/include" done ## OR choices=("alsa" "jack") for choice in "${choices[@]}"; do CPPFLAGS="${CPPFLAGS} -I/usr/lib/$choice/include" done
Either of these would work just fine. I'm not sure whether it'd be best to store $DIALOG's output in an array or string as you haven't defined what DIALOG is - but that seems beside the point. This is not a limitation of bash: you can easily get multiple results and use all of them.
Well that for loop works fine, thanks for that, so I always use a for loop in these cases, but still, I shouldn't use these things in a PKGBUILD, right?
What part of DIALOG didn't I define?
edit; congratulations on becoming a forum moderator
Last edited by qinohe (2014-06-01 12:00:15)
Offline
No, it's not about soudsystem, that was in the build, and I removed that part.
So when I asked for an example to show what you were trying to do you instead showed a PKGBUILD with the relevant part removed??
I shouldn't use these things in a PKGBUILD, right?
Correct, PKGBUILDs should not be interactive. I just wanted to clarify what you claimed may be a limitation in bash - I see no reason for such a conclusion and I saw it as an opportunity to work a new problem (fun for me, potential learning for you).
But as it is *still* completely unclear what variable you'd like to have two values, I guess I can't proceed with that. The example in post #1 is too abstract and obscurred to mean anything (hat/hit, cat in the hat, "aaa" "bbb" "ccc", what do these things represent). The more recent example for selecting sound systems is a much clearer example - but now you say it was not actually an example of what you were talking about, so I read it for no reason.
What part of DIALOG didn't I define?
Oops, sorry, I missed the line where it was defined - *if* this were to be a PKGBUILD, dialog would have to be added to the makedepends.
congratulations on becoming a forum moderator
Thanks
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
So when I asked for an example to show what you were trying to do you instead showed a PKGBUILD with the relevant part removed??
Yep, sorry, my bad, I will post the correct part at the bottom.
Correct, PKGBUILDs should not be interactive. I just wanted to clarify what you claimed may be a limitation in bash - I see no reason for such a conclusion and I saw it as an opportunity to work a new problem (fun for me, potential learning for you).
Sure, I'd like to see it evolve too, as I really think it is possible..
But as it is *still* completely unclear what variable you'd like to have two values, I guess I can't proceed with that. The example in post #1 is too abstract and obscurred to mean anything (hat/hit, cat in the hat, "aaa" "bbb" "ccc", what do these things represent). The more recent example for selecting sound systems is a much clearer example - but now you say it was not actually an example of what you were talking about, so I read it for no reason.
You know, I always thought, simplifying a problem makes it easier, but thats not the case, I see. No, I really have that soundsytem part in my own PKGBUILD, it works.)
Oops, sorry, I missed the line where it was defined - *if* this were to be a PKGBUILD, dialog would have to be added to the makedepends.
Ah, thats a very valuable tip, thanks for that.)
The part it's about
mco1='aac'
mco2='alsa'
mco3='curl'
mco4='ffmpeg'
mco5='flac'
mco6='jack'
mco7='modplug'
mco8='mp3'
mco9='musepack'
mco10='oss'
mco11='rcc'
mco12='samplerate'
mco13='sidplay2'
mco14='sndfile'
mco15='speex'
mco16='timidity'
mco17='vorbis'
mco18='wavpack'
confmoc=$(confmoc 2>/dev/null) || confmoc=/tmp/confmoc
trap 'rm -f "$confmoc"' 0 1 2 5 15
DIALOG=${DIALOG=dialog}
$DIALOG --backtitle "Create your personal MOC player." \
--title "Choose options to compile." --clear \
--checklist "" 11 30 5 \
"$mco1" "" on \
"$mco2" "" on \
"$mco3" "" on \
"$mco4" "" on \
"$mco5" "" on \
"$mco6" "" on \
"$mco7" "" on \
"$mco8" "" on \
"$mco9" "" on \
"$mco10" "" on \
"$mco11" "" on \
"$mco12" "" on \
"$mco13" "" on \
"$mco14" "" on \
"$mco15" "" on \
"$mco16" "" on \
"$mco17" "" on \
"$mco18" "" on 2>/tmp/confmoc;
retval=$?
CONFMOC=$(cat "$confmoc")
case $retval in
0)
if [[ ! -f /tmp/confmoc ]]; then
echo "confmoc not found!, use all options."
fi
if [ "$mco1..mco18" = "$confmoc" ]; then
wiorwo='with'
else
wiorwo='without'
fi
./configure --prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/bin \
--enable-debug \
--'$wiorwo'-'$mco1' \
--'$wiorwo'-'$mco2' \
--'$wiorwo'-'$mco3' \
--'$wiorwo'-'$mco4' \
--'$wiorwo'-'$mco5' \
--'$wiorwo'-'$mco6' \
--'$wiorwo'-'$mco7' \
--'$wiorwo'-'$mco8' \
--'$wiorwo'-'$mco9' \
--'$wiorwo'-'$mco10' \
--'$wiorwo'-'$mco11' \
--'$wiorwo'-'$mco12' \
--'$wiorwo'-'$mco13' \
--'$wiorwo'-'$mco14' \
--'$wiorwo'-'$mco15' \
--'$wiorwo'-'$mco16' \
--'$wiorwo'-'$mco17' \
--'$wiorwo'-'$mco18'
;;
esac
make
Offline
I'm not sure what that if block right before the configure is supposed to do, but now I see what you are going for - and it is certainly possible in bash (just not appropriate in a PKGBUILD). I take it the wiorwo variable is what you want holding more than one value. That would work fine if it were an array (but that if block would need revising). Then your configure lines would be of the form "--${wiorwo[1]}-${mco1}". Note also that variables in single quotes wont be expanded, though that is a separate issue.
For this use, if I understand it, an array of wiorwo variables wouldn't actually serve much purpose. See the following for an alternative - I've reduced the options available to four, but others can be added by simply adding them to the first array:
opts_avail=( "alsa" "curl" "jack" "flac" )
dialog_opts=""
conf_opts=""
for opt in "${opts_avail[@]}"; do
dialog_opts="$dialog_opts \"$opt\" \"\" on"
done
dialog --backtitle "Create your personal MOC player." \
--title "Choose options to compile." --clear \
--checklist "" 11 30 5 $dialog_opts 2>/tmp/confmoc
for opt in "${opts_avail[@]}"; do
if grep -w -q "$opt" /tmp/confmoc; then
conf_opts="$conf_opts --with-$opt"
else
conf_opts="$conf_opts --without-$opt"
fi
done
./configure --prefix=/usr \
# other basics here \
$conf_opts
make
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
I'm not sure what that if block right before the configure is supposed to do, but now I see what you are going for - and it is certainly possible in bash (just not appropriate in a PKGBUILD). I take it the wiorwo variable is what you want holding more than one value. That would work fine if it were an array (but that if block would need revising). Then your configure lines would be of the form "--${wiorwo[1]}-${mco1}".
Yeah, I thought it would be possible, It is very nasty to get a grip on all possibilities, bash is very versatile. Well I just pasted what I had, since I was not clear on what to do, this was what I could come up with, agree it's messy.
Yes, the wiorwo variable is the one expanding to, in this case, 'with' or 'without'
Note also that variables in single quotes wont be expanded, though that is a separate issue.
I am aware of that, but since there are scores, it would only expand like this, at least the $mco part.
For this use, if I understand it, an array of wiorwo variables wouldn't actually serve much purpose. See the following for an alternative - I've reduced the options available to four, but others can be added by simply adding them to the first array:
opts_avail=( "alsa" "curl" "jack" "flac" ) dialog_opts="" conf_opts="" for opt in "${opts_avail[@]}"; do dialog_opts="$dialog_opts \"$opt\" \"\" on" done dialog --backtitle "Create your personal MOC player." \ --title "Choose options to compile." --clear \ --checklist "" 11 30 5 $dialog_opts 2>/tmp/confmoc for opt in "${opts_avail[@]}"; do if grep -w -q "$opt" /tmp/confmoc; then conf_opts="$conf_opts --with-$opt" else conf_opts="$conf_opts --without-$opt" fi done ./configure --prefix=/usr \ # other basics here \ $conf_opts make
Very nice Triby, I like it.) I need to study this a little bit more because this total new way of declaring '$VAR's', and need to study arrays a little more.
If I have managed to build, I will show the result fake PKGBUILD, thanks for the help so far.
Last edited by qinohe (2014-06-01 13:19:11)
Offline
Success, very nice, to bad we can't use it for PKGBUILD.
Well, it was quite simple actually I just had to implement, configure was winning about a new line, but autoreconf was at the wrong place, so that solved.
Thank you very much for helping me solve this, Trilby, to me the 'rabbit hole' opened up a little, so, where should Alice go next?
Thanks to all for your reply, qinohe
The result PKGBUILD
@ other users: don't use this PKGBUILD as example, it's a bad one
# Maintainer: qinohe@gmail.com
pkgname=moc-svn-dev
pkgver=2546
pkgrel=1
pkgdesc="A MOC svn development version"
arch=('x86_64' 'armv6h')
url="http://moc.daper.net"
license=('GPL')
depends=('libltdl' 'file' 'dialog')
makedepends=('subversion')
optdepends=('curl: Tool for transferring data with URL syntax'
'faad2: Open source MPEG-4 and MPEG-2 AAC decoder'
'ffmpeg: Record, convert, stream audio and video.'
'flac: Free Lossless Audio Codec'
'jack: JACK audio support'
'taglib: Audio Meta-Data Library'
'libid3tag: ID3 tags, audio file data standard for MP3 files'
'libmad: Support MPEG-1, -2 & -2.5, like MP3'
'libmodplug: Libs. to play MOD files'
'libmpcdec: Libs.for Musepack, audio compression format'
'libtimidity: Software synthesizer, convert MIDI to PCM'
'libvorbis: Libs. for playing Ogg files'
'sidplay2: Play C64 (Commodore) mono & stereo file formats'
'speex: Free Codec For Free Speech'
'wavpack: Hybrid Lossless Audio Compression')
provides=(moc)
conflicts=(moc)
options=('!libtool')
md5sums=('SKIP')
_svntrunk=svn://daper.net/moc/trunk
_svnmod=moc
build() {
cd "$srcdir"
msg "Connecting to SVN server...."
if [[ -d "$_svnmod/.svn" ]]; then
(cd "$_svnmod" && svn up -r "$pkgver")
else
svn co "$_svntrunk" --config-dir ./ -r "$pkgver" "$_svnmod"
fi
msg "SVN checkout done or server timeout"
msg "Starting build..."
rm -rf "$srcdir/$_svnmod-build"
svn export "$srcdir/$_svnmod" "$srcdir/$_svnmod-build"
cd "$srcdir/$_svnmod-build"
soundsys=$(soundsys 2>/dev/null) || soundsys=/tmp/soundsys
trap 'rm -f "$soundsys"' 0 1 2 5 15
DIALOG=${DIALOG=dialog}
$DIALOG --backtitle "Choose your soundsystem'." \
--title "Default soundsystem to be set?" --clear \
--radiolist "" 11 30 5 \
"alsa" "" off \
"jack" "" off \
"oss" "" off 2>/tmp/soundsys;
retval=$?
soundsystem=$(cat "$soundsys")
case $retval in
0)
if [[ ! -f "$soundsys" ]]; then
echo "soundsys not found, use generic"
fi
choices="$soundsystem"
for choice in $choices; do
CPPFLAGS="${CPPFLAGS} -I/usr/lib/$choice/include"
done
esac
autoreconf -i
opts_avail=( "aac" "alsa" "curl" "ffmpeg" "flac" "jack" "modplug" "mp3" "musepack" "oss" "rcc" "samplerate" "sidplay2" "sndfile" "speex" "timidity" "vorbis" "wavpack" )
dialog_opts=""
conf_opts=""
for opt in "${opts_avail[@]}"; do
dialog_opts="$dialog_opts \"$opt\" \"\" on"
done
dialog --backtitle "Create your personal MOC player." \
--title "Choose options to compile." --clear \
--checklist "" 11 30 5 $dialog_opts 2>/tmp/confmoc
for opt in "${opts_avail[@]}"; do
if grep -w -q "$opt" /tmp/confmoc; then
conf_opts="$conf_opts --with-$opt"
else
conf_opts="$conf_opts --without-$opt"
fi
done
./configure --prefix=/usr \
--enable-debug \
--bindir=/usr/bin \
--sbindir=/usr/bin \
--enable-debug \
$conf_opts
make
}
package() {
cd "$srcdir/$_svnmod-build"
make DESTDIR="$pkgdir/" install
}
# vim:set ts=2 sw=2 et:
Offline