moved all of the downloaded and generated stuff to a single folder
This makes the separation between our source code and everything else
much cleaner. It also makes it easier to ignore all of the output code
etc etc. The deploy etc commands haven't been tested yet, but I don't
think I broke them.
diff --git a/aos/build/build.sh b/aos/build/build.sh
index 9ec745a..4b36e7e 100755
--- a/aos/build/build.sh
+++ b/aos/build/build.sh
@@ -20,37 +20,37 @@
[ "${DEBUG}" == "yes" -o "${DEBUG}" == "no" ] || ( echo Debug "(${DEBUG})" must be '"yes" or "no"'. ; exit 1 )
AOS=`dirname $0`/..
-NINJA_RELEASE=v1.4.0
-NINJA_DIR=${AOS}/externals/ninja-${NINJA_RELEASE}
-NINJA=${NINJA_DIR}/ninja
-# From chromium@154360:trunk/src/DEPS.
-GYP_REVISION=1738
-GYP_DIR=${AOS}/externals/gyp-${GYP_REVISION}
-GYP=${GYP_DIR}/gyp
-OUTDIR=${AOS}/../out_${PLATFORM}
-BUILD_NINJA=${OUTDIR}/Default/build.ninja
+OUTDIR=${AOS}/../output/${PLATFORM}
+BUILD_NINJA=${OUTDIR}/build.ninja
-[ -d ${NINJA_DIR} ] || git clone --branch ${NINJA_RELEASE} https://github.com/martine/ninja.git ${NINJA_DIR}
-[ -x ${NINJA} ] || ${NINJA_DIR}/bootstrap.py
-[ -d ${GYP_DIR} ] || ( svn co http://gyp.googlecode.com/svn/trunk -r ${GYP_REVISION} ${GYP_DIR} && patch -p1 -d ${GYP_DIR} < ${AOS}/externals/gyp.patch )
${AOS}/build/download_externals.sh
+. $(dirname $0)/tools_config
# The exciting quoting is so that it ends up with -DWHATEVER='"'`a command`'"'.
# The '"' at either end is so that it creates a string constant when expanded
# in the C/C++ code.
COMMONFLAGS='-DLOG_SOURCENAME='"'\"'"'`basename $in`'"'\"' "
-if [ ${PLATFORM} == crio ]; then
- COMMONFLAGS+='-DAOS_INITNAME=aos_init_function_`readlink -f $out | sed \"s/[\/.]/_/g\"` '
-fi
if [[ "${ACTION}" != "clean" && ( ! -d ${OUTDIR} || -n \
"`find ${AOS}/.. -newer ${BUILD_NINJA} \( -name '*.gyp' -or -name '*.gypi' \)`" ) ]]; then
- ${GYP} \
- --check --depth=${AOS}/.. --no-circular-check -f ninja \
- -I${AOS}/build/aos.gypi -Goutput_dir=out_${PLATFORM} \
- -DOS=${PLATFORM} -DWIND_BASE=${WIND_BASE} -DDEBUG=${DEBUG} \
- ${GYP_MAIN}
+ # This is a gyp "file" that we pipe into gyp so that it will put the output
+ # in a directory named what we want where we want it.
+ GYP_INCLUDE=$(cat <<END
+{
+ 'target_defaults': {
+ 'configurations': {
+ '${PLATFORM}': {}
+ }
+ }
+}
+END
+)
+ echo "${GYP_INCLUDE}" | ${GYP} \
+ --check --depth=${AOS}/.. --no-circular-check -f ninja \
+ -I${AOS}/build/aos.gypi -I/dev/stdin -Goutput_dir=output \
+ -DOS=${PLATFORM} -DWIND_BASE=${WIND_BASE} -DDEBUG=${DEBUG} \
+ ${GYP_MAIN}
# Have to substitute "command = $compiler" so that it doesn't try to
# substitute them in the linker commands, where it doesn't work.
sed -i "s:command = \$cc:\\0 ${COMMONFLAGS}:g ; \
@@ -69,28 +69,28 @@
else
NINJA_ACTION=
fi
- ${NINJA} -C ${OUTDIR}/Default ${NINJA_ACTION} "$@"
+ ${NINJA} -C ${OUTDIR} ${NINJA_ACTION} "$@"
if [[ ${ACTION} == deploy || ${ACTION} == redeploy ]]; then
[ ${PLATFORM} == atom ] && \
rsync --progress -c -r \
- ${OUTDIR}/Default/outputs/* \
+ ${OUTDIR}/outputs/* \
driver@`${AOS}/build/get_ip fitpc`:/home/driver/robot_code/bin
ssh driver@`${AOS}/build/get_ip fitpc` "sync; sync; sync"
[ ${PLATFORM} == crio ] && \
ncftpput `${AOS}/build/get_ip robot` / \
- ${OUTDIR}/Default/lib/FRC_UserProgram.out
+ ${OUTDIR}/lib/FRC_UserProgram.out
fi
if [[ ${ACTION} == redeploy ]]; then
if [[ ${PLATFORM} != crio ]]; then
echo "Platform ${PLATFORM} does not support redeploy." 1>&2
exit 1
fi
- ${OUTDIR}/../out_atom/Default/outputs/netconsole <<"END"
+ ${OUTDIR}/../out_atom/outputs/netconsole <<"END"
unld "FRC_UserProgram.out"
ld < FRC_UserProgram.out
END
fi
if [[ ${ACTION} == tests ]]; then
- find ${OUTDIR}/Default/tests -executable -exec {} \;
+ find ${OUTDIR}/tests -executable -exec {} \;
fi
fi
diff --git a/aos/build/download_externals.sh b/aos/build/download_externals.sh
index 13c8eff..be77aa5 100755
--- a/aos/build/download_externals.sh
+++ b/aos/build/download_externals.sh
@@ -2,8 +2,19 @@
set -e
-AOS=`dirname $0`/..
-EXTERNALS=${AOS}/externals
+AOS=$(readlink -f $(dirname $0)/..)
+. $(dirname $0)/tools_config
+
+TMPDIR=/tmp/$$-aos-tmpdir
+mkdir -p ${EXTERNALS}
+mkdir -p ${COMPILED}
+
+# get and build ninja
+[ -d ${NINJA_DIR} ] || git clone --branch ${NINJA_RELEASE} https://github.com/martine/ninja.git ${NINJA_DIR}
+[ -x ${NINJA} ] || ${NINJA_DIR}/bootstrap.py
+
+# get gyp
+[ -d ${GYP_DIR} ] || ( svn co http://gyp.googlecode.com/svn/trunk -r ${GYP_REVISION} ${GYP_DIR} && patch -p1 -d ${GYP_DIR} < ${AOS}/externals/gyp.patch )
# get gccdist
GCCDIST=${EXTERNALS}/gccdist
@@ -32,7 +43,7 @@
LIBJPEG_VERSION=8d
LIBJPEG_DIR=${EXTERNALS}/jpeg-${LIBJPEG_VERSION}
# NOTE: this directory ends up in #include names
-LIBJPEG_PREFIX=${EXTERNALS}/libjpeg
+LIBJPEG_PREFIX=${COMPILED}/libjpeg
LIBJPEG_LIB=${LIBJPEG_PREFIX}/lib/libjpeg.a
LIBJPEG_TAR=${EXTERNALS}/jpegsrc.v${LIBJPEG_VERSION}.tar.gz
[ -f ${LIBJPEG_TAR} ] || wget http://www.ijg.org/files/jpegsrc.v${LIBJPEG_VERSION}.tar.gz -O ${LIBJPEG_TAR}
@@ -41,26 +52,26 @@
# get gtest
GTEST_VERSION=1.6.0
-GTEST_DIR=${EXTERNALS}/gtest-${GTEST_VERSION}-p1
+GTEST_DIR=${EXTERNALS}/gtest-${GTEST_VERSION}
GTEST_ZIP=${EXTERNALS}/gtest-${GTEST_VERSION}.zip
-TMPDIR=/tmp/$$-aos-tmpdir
[ -f ${GTEST_ZIP} ] || wget http://googletest.googlecode.com/files/gtest-${GTEST_VERSION}.zip -O ${GTEST_ZIP}
-[ -d ${GTEST_DIR} ] || ( unzip ${GTEST_ZIP} -d ${TMPDIR} && mv ${TMPDIR}/gtest-${GTEST_VERSION} ${GTEST_DIR} && cd ${GTEST_DIR} && patch -p1 < ../gtest.patch )
+[ -d ${GTEST_DIR} ] || ( unzip ${GTEST_ZIP} -d ${TMPDIR} && mv ${TMPDIR}/gtest-${GTEST_VERSION} ${GTEST_DIR} && cd ${GTEST_DIR} && patch -p1 < ${AOS}/externals/gtest.patch )
# get and build ctemplate
# This is the next revision after the 2.2 release and it only adds spaces to
# make gcc 4.7 with --std=c++11 happy (user-defined string literals...).
CTEMPLATE_VERSION=129
-CTEMPLATE_DIR=${EXTERNALS}/ctemplate-${CTEMPLATE_VERSION}
+CTEMPLATE_TAR=${EXTERNALS}/ctemplate-${CTEMPLATE_VERSION}.tar.gz
+CTEMPLATE_DIR=${COMPILED}/ctemplate-${CTEMPLATE_VERSION}
CTEMPLATE_PREFIX=${CTEMPLATE_DIR}-prefix
CTEMPLATE_LIB=${CTEMPLATE_PREFIX}/lib/libctemplate.a
CTEMPLATE_URL=http://ctemplate.googlecode.com
if [[ "${CTEMPLATE_VERSION}" =~ /\./ ]]; then
CTEMPLATE_URL=${CTEMPLATE_URL}/files/ctemplate-${CTEMPLATE_VERSION}.tar.gz
- [ -f ${CTEMPLATE_DIR}.tar.gz ] || \
- wget ${CTEMPLATE_URL} -O ${CTEMPLATE_DIR}.tar.gz
+ [ -f ${CTEMPLATE_TAR} ] || \
+ wget ${CTEMPLATE_URL} -O ${CTEMPLATE_TAR}
[ -d ${CTEMPLATE_DIR} ] || ( mkdir ${CTEMPLATE_DIR} && tar \
- --strip-components=1 -C ${CTEMPLATE_DIR} -xf ${CTEMPLATE_DIR}.tar.gz )
+ --strip-components=1 -C ${CTEMPLATE_DIR} -xf ${CTEMPLATE_TAR} )
else
CTEMPLATE_URL=${CTEMPLATE_URL}/svn/trunk
[ -d ${CTEMPLATE_DIR} ] || \
@@ -73,13 +84,14 @@
# get and build gflags
GFLAGS_VERSION=2.0
-GFLAGS_DIR=${EXTERNALS}/gflags-${GFLAGS_VERSION}
+GFLAGS_TAR=${EXTERNALS}/gflags-${GFLAGS_VERSION}.tar.gz
+GFLAGS_DIR=${COMPILED}/gflags-${GFLAGS_VERSION}
GFLAGS_PREFIX=${GFLAGS_DIR}-prefix
GFLAGS_LIB=${GFLAGS_PREFIX}/lib/libgflags.a
GFLAGS_URL=https://gflags.googlecode.com/files/gflags-${GFLAGS_VERSION}.tar.gz
-[ -f ${GFLAGS_DIR}.tar.gz ] || wget ${GFLAGS_URL} -O ${GFLAGS_DIR}.tar.gz
+[ -f ${GFLAGS_TAR} ] || wget ${GFLAGS_URL} -O ${GFLAGS_TAR}
[ -d ${GFLAGS_DIR} ] || ( mkdir ${GFLAGS_DIR} && tar \
- --strip-components=1 -C ${GFLAGS_DIR} -xf ${GFLAGS_DIR}.tar.gz )
+ --strip-components=1 -C ${GFLAGS_DIR} -xf ${GFLAGS_TAR} )
[ -f ${GFLAGS_LIB} ] || env -i PATH="${PATH}" \
CFLAGS='-m32' CXXFLAGS='-m32' LDFLAGS='-m32' \
bash -c "cd ${GFLAGS_DIR} && ./configure \
@@ -88,13 +100,14 @@
# get and build libusb
LIBUSB_VERSION=1.0.9
LIBUSB_APIVERSION=1.0
-LIBUSB_DIR=${EXTERNALS}/libusb-${LIBUSB_VERSION}
+LIBUSB_TAR=${EXTERNALS}/libusb-${LIBUSB_VERSION}.tar.bz2
+LIBUSB_DIR=${COMPILED}/libusb-${LIBUSB_VERSION}
LIBUSB_PREFIX=${LIBUSB_DIR}-prefix
LIBUSB_LIB=${LIBUSB_PREFIX}/lib/libusb-${LIBUSB_APIVERSION}.a
LIBUSB_URL=http://sourceforge.net/projects/libusb/files/libusb-${LIBUSB_APIVERSION}/libusb-${LIBUSB_VERSION}/libusb-${LIBUSB_VERSION}.tar.bz2
-[ -f ${LIBUSB_DIR}.tar.bz2 ] || wget ${LIBUSB_URL} -O ${LIBUSB_DIR}.tar.bz2
+[ -f ${LIBUSB_TAR} ] || wget ${LIBUSB_URL} -O ${LIBUSB_TAR}
[ -d ${LIBUSB_DIR} ] || ( mkdir ${LIBUSB_DIR} && tar \
- --strip-components=1 -C ${LIBUSB_DIR} -xf ${LIBUSB_DIR}.tar.bz2 )
+ --strip-components=1 -C ${LIBUSB_DIR} -xf ${LIBUSB_TAR} )
[ -f ${LIBUSB_LIB} ] || env -i PATH="${PATH}" \
CFLAGS='-m32' CXXFLAGS='-m32' LDFLAGS='-m32' \
bash -c "cd ${LIBUSB_DIR} && ./configure \
@@ -109,14 +122,15 @@
# get and build libevent
LIBEVENT_VERSION=2.0.21
-LIBEVENT_DIR=${EXTERNALS}/libevent-${LIBEVENT_VERSION}
+LIBEVENT_TAR=${EXTERNALS}/libevent-${LIBEVENT_VERSION}.tar.gz
+LIBEVENT_DIR=${COMPILED}/libevent-${LIBEVENT_VERSION}
LIBEVENT_PREFIX=${LIBEVENT_DIR}-prefix
LIBEVENT_LIB=${LIBEVENT_PREFIX}/lib/libevent.a
LIBEVENT_URL=https://github.com/downloads/libevent/libevent
LIBEVENT_URL=${LIBEVENT_URL}/libevent-${LIBEVENT_VERSION}-stable.tar.gz
-[ -f ${LIBEVENT_DIR}.tar.gz ] || wget ${LIBEVENT_URL} -O ${LIBEVENT_DIR}.tar.gz
+[ -f ${LIBEVENT_TAR} ] || wget ${LIBEVENT_URL} -O ${LIBEVENT_TAR}
[ -d ${LIBEVENT_DIR} ] || ( mkdir ${LIBEVENT_DIR} && tar \
- --strip-components=1 -C ${LIBEVENT_DIR} -xf ${LIBEVENT_DIR}.tar.gz )
+ --strip-components=1 -C ${LIBEVENT_DIR} -xf ${LIBEVENT_TAR} )
[ -f ${LIBEVENT_LIB} ] || env -i PATH="${PATH}" \
CFLAGS='-m32' CXXFLAGS='-m32' LDFLAGS='-m32' \
bash -c "cd ${LIBEVENT_DIR} && ./configure \
@@ -124,15 +138,18 @@
# get and build libcdd
LIBCDD_VERSION=094g
-LIBCDD_DIR=${EXTERNALS}/libcdd-${LIBCDD_VERSION}
+LIBCDD_TAR=${EXTERNALS}/libcdd-${LIBCDD_VERSION}.tar.gz
+LIBCDD_DIR=${COMPILED}/libcdd-${LIBCDD_VERSION}
LIBCDD_PREFIX=${LIBCDD_DIR}-prefix
LIBCDD_LIB=${LIBCDD_PREFIX}/lib/libcdd.a
LIBCDD_URL=ftp://ftp.ifor.math.ethz.ch/pub/fukuda/cdd/cddlib-${LIBCDD_VERSION}.tar.gz
-[ -f ${LIBCDD_DIR}.tar.gz ] || \
- wget ${LIBCDD_URL} -O ${LIBCDD_DIR}.tar.gz
+[ -f ${LIBCDD_TAR} ] || \
+ wget ${LIBCDD_URL} -O ${LIBCDD_TAR}
[ -d ${LIBCDD_DIR} ] || ( mkdir ${LIBCDD_DIR} && tar \
- --strip-components=1 -C ${LIBCDD_DIR} -xf ${LIBCDD_DIR}.tar.gz )
+ --strip-components=1 -C ${LIBCDD_DIR} -xf ${LIBCDD_TAR} )
[ -f ${LIBCDD_LIB} ] || env -i PATH="${PATH}" \
CFLAGS='-m32' CXXFLAGS='-m32' LDFLAGS='-m32' \
bash -c "cd ${LIBCDD_DIR} && ./configure --disable-shared \
--prefix=`readlink -f ${LIBCDD_PREFIX}` && make && make install"
+
+rm -rf ${TMPDIR}
diff --git a/aos/build/externals.gyp b/aos/build/externals.gyp
index 99b26cf..5c26553 100644
--- a/aos/build/externals.gyp
+++ b/aos/build/externals.gyp
@@ -2,12 +2,14 @@
# download_externals.sh makes sure that all of them have been downloaded.
{
'variables': {
- 'externals': '<(AOS)/externals',
- 'externals_abs': '<!(readlink -f ../externals)',
+ 'externals': '<(AOS)/../output/downloaded',
+ 'externals_abs': '<!(readlink -f ../../output/downloaded)',
+ 'compiled': '<(externals)/../compiled-i386',
+ 'compiled_abs': '<(externals_abs)/../compiled-i386',
# These versions have to be kept in sync with the ones in download_externals.sh.
'eigen_version': '3.1.3',
- 'gtest_version': '1.6.0-p1',
+ 'gtest_version': '1.6.0',
'onejar_version': '0.97',
'ctemplate_version': '129',
'gflags_version': '2.0',
@@ -22,7 +24,7 @@
'target_name': 'WPILib',
'type': 'static_library',
'sources': [
- '<!@(find <(externals)/WPILib/WPILib/ -name *.cpp)',
+ '<!@(find <(AOS)/externals/WPILib/WPILib/ -name *.cpp)',
],
'cflags!': [
'-Werror',
@@ -34,13 +36,13 @@
'-O3'
],
'include_dirs': [
- '<(externals)/WPILib',
- '<(externals)/WPILib/WPILib',
+ '<(AOS)/externals/WPILib',
+ '<(AOS)/externals/WPILib/WPILib',
],
'direct_dependent_settings': {
'cflags': [
- '-isystem', '<(externals_abs)/WPILib',
- '-isystem', '<(externals_abs)/WPILib/WPILib',
+ '-isystem', '<(AOS)/externals/WPILib',
+ '-isystem', '<(AOS)/externals/WPILib/WPILib',
],
},
},
@@ -48,14 +50,14 @@
'target_name': 'WPILib-NetworkRobotValues',
'type': 'static_library',
'sources': [
- '<(externals)/WPILib/WPILib/NetworkRobot/NetworkRobotValues.cpp'
+ '<(AOS)/externals/WPILib/WPILib/NetworkRobot/NetworkRobotValues.cpp'
],
'include_dirs': [
- '<(externals)/WPILib',
+ '<(AOS)/externals/WPILib',
],
'direct_dependent_settings': {
'include_dirs': [
- '<(externals)/WPILib',
+ '<(AOS)/externals/WPILib',
],
},
},
@@ -102,10 +104,10 @@
'target_name': 'libevent',
'type': 'none',
'link_settings': {
- 'libraries': ['<(externals_abs)/libevent-<(libevent_version)-prefix/lib/libevent.a'],
+ 'libraries': ['<(compiled_abs)/libevent-<(libevent_version)-prefix/lib/libevent.a'],
},
'direct_dependent_settings': {
- 'include_dirs': ['<(externals)/libevent-<(libevent_version)-prefix/include'],
+ 'include_dirs': ['<(compiled)/libevent-<(libevent_version)-prefix/include'],
},
},
{
@@ -121,7 +123,7 @@
'target_name': 'libjpeg',
'type': 'none',
'direct_dependent_settings': {
- 'libraries': ['<(externals_abs)/libjpeg/lib/libjpeg.a'],
+ 'libraries': ['<(compiled_abs)/libjpeg/lib/libjpeg.a'],
},
},
{
@@ -182,40 +184,40 @@
'target_name': 'ctemplate',
'type': 'none',
'link_settings': {
- 'libraries': ['<(externals_abs)/ctemplate-<(ctemplate_version)-prefix/lib/libctemplate.a'],
+ 'libraries': ['<(compiled_abs)/ctemplate-<(ctemplate_version)-prefix/lib/libctemplate.a'],
},
'direct_dependent_settings': {
- 'include_dirs': ['<(externals)/ctemplate-<(ctemplate_version)-prefix/include'],
+ 'include_dirs': ['<(compiled)/ctemplate-<(ctemplate_version)-prefix/include'],
},
},
{
'target_name': 'gflags',
'type': 'none',
'link_settings': {
- 'libraries': ['<(externals_abs)/gflags-<(gflags_version)-prefix/lib/libgflags.a'],
+ 'libraries': ['<(compiled_abs)/gflags-<(gflags_version)-prefix/lib/libgflags.a'],
},
'direct_dependent_settings': {
- 'include_dirs': ['<(externals)/gflags-<(gflags_version)-prefix/include'],
+ 'include_dirs': ['<(compiled)/gflags-<(gflags_version)-prefix/include'],
},
},
{
'target_name': 'libusb',
'type': 'none',
'link_settings': {
- 'libraries': ['<(externals_abs)/libusb-<(libusb_version)-prefix/lib/libusb-<(libusb_apiversion).a'],
+ 'libraries': ['<(compiled_abs)/libusb-<(libusb_version)-prefix/lib/libusb-<(libusb_apiversion).a'],
},
'direct_dependent_settings': {
- 'include_dirs': ['<(externals)/libusb-<(libusb_version)-prefix/include'],
+ 'include_dirs': ['<(compiled)/libusb-<(libusb_version)-prefix/include'],
},
},
{
'target_name': 'libcdd',
'type': 'none',
'link_settings': {
- 'libraries': ['<(externals_abs)/libcdd-<(libcdd_version)-prefix/lib/libcdd.a'],
+ 'libraries': ['<(compiled_abs)/libcdd-<(libcdd_version)-prefix/lib/libcdd.a'],
},
'direct_dependent_settings': {
- 'include_dirs': ['<(externals_abs)/libcdd-<(libcdd_version)-prefix/include'],
+ 'include_dirs': ['<(compiled_abs)/libcdd-<(libcdd_version)-prefix/include'],
},
},
],
diff --git a/aos/build/tools_config b/aos/build/tools_config
new file mode 100644
index 0000000..653c1ef
--- /dev/null
+++ b/aos/build/tools_config
@@ -0,0 +1,14 @@
+# This is a shell fragment that sets up variables related to where the tools
+# that download_externals.sh downloads so build.sh can use.
+
+EXTERNALS=${AOS}/../output/downloaded
+COMPILED=${EXTERNALS}/../compiled-i386
+
+NINJA_RELEASE=v1.4.0
+NINJA_DIR=${EXTERNALS}/ninja-${NINJA_RELEASE}
+NINJA=${NINJA_DIR}/ninja
+
+# From chromium@154360:trunk/src/DEPS.
+GYP_REVISION=1738
+GYP_DIR=${EXTERNALS}/gyp-${GYP_REVISION}
+GYP=${GYP_DIR}/gyp
diff --git a/aos/externals/.gitignore b/aos/externals/.gitignore
deleted file mode 100644
index 694129e..0000000
--- a/aos/externals/.gitignore
+++ /dev/null
@@ -1,31 +0,0 @@
-/ctemplate-129-prefix/
-/ctemplate-129.tar.gz
-/ctemplate-129/
-/eigen-3.1.3.tar.bz2
-/eigen-3.1.3/
-/gccdist.zip
-/gccdist/
-/gtest-1.6.0-p1/
-/gtest-1.6.0.zip
-/gyp-1738/
-/javacv-0.2-bin.zip
-/javacv-bin/
-/jpeg-8d/
-/jpegsrc.v8d.tar.gz
-/libjpeg/
-/ninja-v1.4.0/
-/one-jar-boot-0.97.jar
-/gflags-2.0-prefix/
-/gflags-2.0.tar.gz
-/gflags-2.0/
-/libusb-1.0.9-prefix/
-/libusb-1.0.9.tar.bz2
-/libusb-1.0.9/
-/compiler-rt-RELEASE_32_final/
-/libevent-2.0.21-prefix/
-/libevent-2.0.21.tar.gz
-/libevent-2.0.21/
-/libcdd-094g-prefix/
-/libcdd-094g.tar.gz
-/libcdd-094g/
-