diff --git a/CMakeLists.txt b/CMakeLists.txt index 371bb40..aa20611 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,10 +2,11 @@ cmake_minimum_required (VERSION 2.8) project (Morfeusz) -set (Morfeusz_VERSION_MAJOR 2) -set (Morfeusz_VERSION_MINOR 0) +set (Morfeusz_VERSION_MAJOR 1) +set (Morfeusz_VERSION_MINOR 9) set (Morfeusz_VERSION_PATCH 0) set (Morfeusz_VERSION "${Morfeusz_VERSION_MAJOR}.${Morfeusz_VERSION_MINOR}.${Morfeusz_VERSION_PATCH}") +set (Morfeusz_LIB_VERSION "${Morfeusz_VERSION}") if (DEFAULT_DICT_NAME) set (Morfeusz_VERSION_TWEAK "${DEFAULT_DICT_NAME}") if (DICT_VERSION) @@ -28,7 +29,7 @@ endif () if (NOT CMAKE_BUILD_TYPE) set (CMAKE_BUILD_TYPE Release) endif () -#~ set (CMAKE_SKIP_RPATH ON) +set (CMAKE_SKIP_RPATH ON) message ("Version=${Morfeusz_VERSION}") @@ -57,7 +58,7 @@ else () set (DEFAULT_DICT_INSTALL_DIR "share/morfeusz/dictionaries") endif () -add_definitions (-DMORFEUSZ2_VERSION="${Morfeusz_VERSION_MAJOR}.${Morfeusz_VERSION_MINOR}.${Morfeusz_VERSION_PATCH}") +add_definitions (-DMORFEUSZ2_VERSION="${Morfeusz_LIB_VERSION}") add_definitions (-DMORFEUSZ_DEFAULT_DICT_NAME="${DEFAULT_DICT_NAME}") add_definitions (-DBUILDING_MORFEUSZ) if (EMBEDDED_DEFAULT_DICT) @@ -94,7 +95,7 @@ else () endif () # PROJECT_VERSION -#~ set (PROJECT_VERSION "${Morfeusz_VERSION_MAJOR}.${Morfeusz_VERSION_MINOR}.${Morfeusz_VERSION_PATCH}") +#~ set (PROJECT_VERSION "${Morfeusz_LIB_VERSION}") ### USER DEFINED VARIABLES diff --git a/buildAll.sh b/buildAll.sh index 5a09369..7c0d08b 100755 --- a/buildAll.sh +++ b/buildAll.sh @@ -97,6 +97,10 @@ function build { mv "$f" "`echo $f | sed -r 's/Linux-amd64.deb$/amd64.deb/' | sed -r 's/Linux-i386.deb/i386.deb/'`" done + if [ "$os" = Linux -a "$embedded" = false ]; then + "$srcDir/createDictionaryDeb.sh" "$DICT_DIR" "${DEFAULT_DICT_NAME}" "${DICT_VERSION}" "${targetDir}" + fi + cd "$srcDir" } @@ -116,9 +120,9 @@ buildDictionaries 2>&1 | log All all { echo "build Linux amd64 true package package-java package-python package-builder 2>&1 | log Linux-tgz amd64" - echo "build Linux amd64 false package 2>&1 | log Linux-deb amd64" + echo "build Linux amd64 false lib-deb bin-deb dev-deb dictionary-deb java-deb 2>&1 | log Linux-deb amd64" echo "LDFLAGS=-m32;CFLAGS=-m32;CXXFLAGS=-m32 build Linux i386 true package package-java 2>&1 | log Linux-tgz i386" - echo "LDFLAGS=-m32;CFLAGS=-m32;CXXFLAGS=-m32 build Linux i386 false package 2>&1 | log Linux-deb i386" + echo "LDFLAGS=-m32;CFLAGS=-m32;CXXFLAGS=-m32 build Linux i386 false lib-deb bin-deb java-deb 2>&1 | log Linux-deb i386" echo "build Windows amd64 true package package-java 2>&1 | log Windows amd64" echo "build Windows i386 true package package-java 2>&1 | log Windows i386" echo "build Darwin amd64 true package package-java 2>&1 | log Darwin amd64" diff --git a/createBinDeb.sh b/createBinDeb.sh new file mode 100755 index 0000000..c5bde79 --- /dev/null +++ b/createBinDeb.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +BIN_DIR="$1" +LIB_VERSION="$2" +ARCH="$3" +TARGET_DIR="$4" + +PKG_NAME="morfeusz2" + +TMP_DIR=`mktemp -d` +PKG_DIR="$TMP_DIR"/"$PKG_NAME"_"$LIB_VERSION" +TARGET_BIN_DIR="$PKG_DIR/usr/bin" +mkdir -p "$TARGET_BIN_DIR" +cp "$BIN_DIR/morfeusz_analyzer" "$BIN_DIR/morfeusz_generator" "$TARGET_BIN_DIR" +strip -s "$TARGET_BIN_DIR/morfeusz_analyzer" \ + "$TARGET_BIN_DIR/morfeusz_generator" + +DIR="$( cd "$( dirname "$0" )" && pwd )" + +"$DIR/createDeb.sh" "$PKG_NAME" \ + "Morphological analyzer for the Polish language." \ + "Morphological analyzer and generator for the Polish Language." \ + "libc6, libmorfeusz2" "morfeusz2-gui" "$LIB_VERSION" "$ARCH" misc "$PKG_DIR" "$TARGET_DIR" diff --git a/createDeb.sh b/createDeb.sh new file mode 100755 index 0000000..64c239e --- /dev/null +++ b/createDeb.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +set -e + +PKG_NAME="$1" +DESC="$2" +EXT_DESC="$3" +DEPENDS="$4" +SUGGESTED="$5" +VERSION="$6" +ARCH="$7" +SECTION="$8" +PKG_DIR="$9" +shift 9 +TARGET_DIR="$1" + +SIZE=`du -s $PKG_DIR | cut -f1` + + + +mkdir -p "$PKG_DIR/DEBIAN" +CONTROL_FILE="$PKG_DIR/DEBIAN/control" +cat >"$CONTROL_FILE" <<EOL +Package: ${PKG_NAME} +Version: ${VERSION} +Section: ${SECTION} +Priority: optional +Architecture: ${ARCH} +Installed-Size: ${SIZE} +Original-Maintainer: Michał Lenart <michal.lenart@ipipan.waw.pl> +Maintainer: Słownik gramatyczny języka polskiego +Homepage: http://sgjp.pl/morfeusz +Depends: ${DEPENDS} +Suggests: ${SUGGESTED} +Description: ${DESC} + ${EXT_DESC} +EOL + +if [ -z "$DEPENDS" ]; then + sed -i '/Depends: /d' "$CONTROL_FILE" +fi +if [ -z "$SUGGESTED" ]; then + sed -i '/Suggests: /d' "$CONTROL_FILE" +fi + +chmod 0644 "$CONTROL_FILE" +chmod g-w "$PKG_DIR" -R + +fakeroot dpkg-deb --build "$PKG_DIR" "$TARGET_DIR" diff --git a/createDevDeb.sh b/createDevDeb.sh new file mode 100755 index 0000000..0ef52c0 --- /dev/null +++ b/createDevDeb.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +INC_DIR="$1" +LIB_VERSION="$2" +TARGET_DIR="$3" + +PKG_NAME="libmorfeusz2-dev" + +TMP_DIR=`mktemp -d` +PKG_DIR="$TMP_DIR"/"$PKG_NAME"_"$LIB_VERSION" +TARGET_INC_DIR="$PKG_DIR/usr/include" +mkdir -p "$TARGET_INC_DIR" +cp "$INC_DIR/morfeusz2.h" "$INC_DIR/morfeusz2_c.h" "$TARGET_INC_DIR" + +DIR="$( cd "$( dirname "$0" )" && pwd )" + +"$DIR/createDeb.sh" "$PKG_NAME" \ + "Runtime library for Morfeusz - header files." \ + "Runtime library for Morfeusz - header files." \ + libmorfeusz2 "" "$LIB_VERSION" all libdevel "$PKG_DIR" "$TARGET_DIR" diff --git a/createDictionaryDeb.sh b/createDictionaryDeb.sh index b158e8a..e4a0ea5 100755 --- a/createDictionaryDeb.sh +++ b/createDictionaryDeb.sh @@ -1,11 +1,13 @@ #!/bin/bash +set -e + DICT_DIR="$1" DICT_NAME="$2" DICT_VERSION="$3" TARGET_DIR="$4" -PKG_NAME="morfeusz-dictionary-${DICT_NAME}" +PKG_NAME="morfeusz2-dictionary-${DICT_NAME}" TMP_DIR=`mktemp -d` PKG_DIR="$TMP_DIR"/"$PKG_NAME"_"$DICT_VERSION" @@ -13,21 +15,10 @@ TARGET_DICT_DIR="$PKG_DIR/usr/share/morfeusz/dictionaries" mkdir -p "$TARGET_DICT_DIR" cp "$DICT_DIR/$DICT_NAME-a.dict" "$TARGET_DICT_DIR" cp "$DICT_DIR/$DICT_NAME-s.dict" "$TARGET_DICT_DIR" -mkdir "$PKG_DIR/DEBIAN" - -CONTROL_FILE="$PKG_DIR/DEBIAN/control" - -cat >"$CONTROL_FILE" <<EOL -Package: morfeusz-dictionary-${DICT_NAME} -Version: ${DICT_VERSION} -Section: devel -Priority: optional -Architecture: all -Maintainer: Michał Lenart <michal.lenart@ipipan.waw.pl> -Depends: morfeusz2 -Description: ${DICT_NAME} dictionary for Morfeusz. -EOL -chmod 0644 "$CONTROL_FILE" +DIR="$( cd "$( dirname "$0" )" && pwd )" -fakeroot dpkg-deb --build "$PKG_DIR" "$TARGET_DIR" +"$DIR/createDeb.sh" "$PKG_NAME" \ + "$DICT_NAME dictionary for Morfeusz." \ + "$DICT_NAME dictionary for the morphological analyzer Morfeusz." \ + "" "libmorfeusz2" "$DICT_VERSION" all misc "$PKG_DIR" "$TARGET_DIR" diff --git a/createGuiDeb.sh b/createGuiDeb.sh new file mode 100755 index 0000000..6bbdf9c --- /dev/null +++ b/createGuiDeb.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +GUI_DIR="$1" +LIB_VERSION="$2" +TARGET_DIR="$3" + +PKG_NAME="morfeusz2-gui" +BIN_NAME="morfeusz-gui" + +TMP_DIR=`mktemp -d` +PKG_DIR="$TMP_DIR"/"$PKG_NAME"_"$LIB_VERSION" +TARGET_BIN_DIR="$PKG_DIR/usr/bin" +mkdir -p "$TARGET_BIN_DIR" +cat > "$TARGET_BIN_DIR/$BIN_NAME" <<EOF +#!/bin/sh +java -jar /usr/share/java/morfeusz.jar +EOF +chmod +x "$TARGET_BIN_DIR/$BIN_NAME" +TARGET_JAR_DIR="$PKG_DIR/usr/share/java" +mkdir -p "$TARGET_JAR_DIR" +cp "$GUI_DIR/morfeusz.jar" "$TARGET_JAR_DIR" + +TARGET_MENU_DIR="$PKG_DIR/usr/share/menu" +mkdir -p "$TARGET_MENU_DIR" +cat > "$TARGET_MENU_DIR/$PKG_NAME" <<EOF +?package($PKG_NAME):needs="X11" section="Applications/Education"\ + title="morfeusz2" command="/usr/bin/$BIN_NAME" +EOF + +TARGET_APP_DIR="$PKG_DIR/usr/share/applications" +mkdir -p "$TARGET_APP_DIR" +cat > "$TARGET_APP_DIR/morfeusz.desktop" <<EOF +[Desktop Entry] +Encoding=UTF-8 +Type=Application +Name=Morfeusz +Comment=The Morphological Analyzer Morfeusz +Comment[pl]=Analizator morfologiczny Morfeusz +Icon=/usr/share/morfeusz2/morfeusz.svg +Exec=/usr/bin/$BIN_NAME +Terminal=false +Categories=Office;Dictionary;GTK; +EOF + +TARGET_SHARE_DIR="$PKG_DIR/usr/share/morfeusz2" +mkdir -p "$TARGET_SHARE_DIR" +cp "$GUI_DIR/morfeusz.svg" "$TARGET_SHARE_DIR" + +mkdir "$PKG_DIR/DEBIAN" +cat > "$PKG_DIR/DEBIAN/postinst" <<EOF +#!/bin/sh +set -e +if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ]; then + update-menus +fi +EOF +cat > "$PKG_DIR/DEBIAN/postrm" <<EOF +#!/bin/sh +set -e +if [ -x "`which update-menus 2>/dev/null`" ]; then update-menus ; fi +EOF +chmod +x "$PKG_DIR/DEBIAN"/post* + + +DIR="$( cd "$( dirname "$0" )" && pwd )" + +"$DIR/createDeb.sh" "$PKG_NAME" \ + "GUI for Morfeusz." \ + "GUI for the morphological analyzer Morfeusz." \ + "java-runtime, libjmorfeusz-java" "" "$LIB_VERSION" all x11 "$PKG_DIR" "$TARGET_DIR" diff --git a/createJavaDeb.sh b/createJavaDeb.sh new file mode 100755 index 0000000..79f066a --- /dev/null +++ b/createJavaDeb.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +set -e + +JAVA_DIR="$1" +LIB_VERSION="$2" +ARCH="$3" +TARGET_DIR="$4" + +PKG_NAME="libjmorfeusz-java" +JNI_NAME="libjmorfeusz.so" +JAR_NAME="jmorfeusz.jar" + +TMP_DIR=`mktemp -d` +PKG_DIR="$TMP_DIR"/"$PKG_NAME"_"$LIB_VERSION" +TARGET_JNI_DIR="$PKG_DIR/usr/lib/jni" +TARGET_JAR_DIR="$PKG_DIR/usr/share/java" +mkdir -p "$TARGET_JNI_DIR" +mkdir -p "$TARGET_JAR_DIR" +cp "$JAVA_DIR/$JNI_NAME" "$TARGET_JNI_DIR" +cp "$JAVA_DIR/$JAR_NAME" "$TARGET_JAR_DIR" +chmod -x "$TARGET_JNI_DIR/$JNI_NAME" +strip --strip-unneeded "$TARGET_JNI_DIR/$JNI_NAME" + +DIR="$( cd "$( dirname "$0" )" && pwd )" + +"$DIR/createDeb.sh" "$PKG_NAME" \ + "Java bindings for Morfeusz." \ + "Java bindings for the morphological analyzer Morfeusz." \ + "libc6, libmorfeusz2" "" "$LIB_VERSION" "$ARCH" java \ + "$PKG_DIR" "$TARGET_DIR" diff --git a/createLibraryDeb.sh b/createLibraryDeb.sh new file mode 100755 index 0000000..6a9abe9 --- /dev/null +++ b/createLibraryDeb.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +set -e + +LIB_DIR="$1" +LIB_VERSION="$2" +ARCH="$3" +DICT="$4" +TARGET_DIR="$5" + +if [ "$DICT" = polimorf ]; then + exit +fi + +#MAJOR_VERSION=`echo "$LIB_VERSION" | cut -f1 -d.` + +PKG_NAME="libmorfeusz2" +LIB_NAME="$PKG_NAME.so" +#LIB_NAME_VERSION="$LIB_NAME.$MAJOR_VERSION" + +TMP_DIR=`mktemp -d` +PKG_DIR="$TMP_DIR"/"$PKG_NAME"_"$LIB_VERSION" +TARGET_LIB_DIR="$PKG_DIR/usr/lib" +mkdir -p "$TARGET_LIB_DIR" +cp "$LIB_DIR/$LIB_NAME" "$TARGET_LIB_DIR" +chmod -x "$TARGET_LIB_DIR/$LIB_NAME" +strip --strip-unneeded "$TARGET_LIB_DIR/$LIB_NAME" +#ln -s "$LIB_NAME_VERSION" "$TARGET_LIB_DIR/$LIB_NAME" + +mkdir "$PKG_DIR/DEBIAN" +#echo "$PKG_NAME $MAJOR_VERSION $PKG_NAME" > "$PKG_DIR/DEBIAN/shlibs" +cat > "$PKG_DIR/DEBIAN/postinst" <<EOF +#!/bin/sh +set -e +if [ "\$1" = "configure" ]; then + ldconfig +fi +EOF +cat > "$PKG_DIR/DEBIAN/postrm" <<EOF +#!/bin/sh +set -e +if [ "\$1" = "remove" ]; then + ldconfig +fi +EOF +chmod +x "$PKG_DIR/DEBIAN"/post* + +DIR="$( cd "$( dirname "$0" )" && pwd )" + +"$DIR/createDeb.sh" "$PKG_NAME" \ + "Runtime library for Morfeusz." \ + "Runtime library for the morphological analyzer Morfeusz." \ + "libc6, morfeusz2-dictionary-sgjp" "morfeusz2-dictionary-polimorf" "$LIB_VERSION" "$ARCH" libs \ + "$PKG_DIR" "$TARGET_DIR" diff --git a/morfeusz/CMakeLists.txt b/morfeusz/CMakeLists.txt index 13a4a40..c65a1b9 100644 --- a/morfeusz/CMakeLists.txt +++ b/morfeusz/CMakeLists.txt @@ -39,8 +39,18 @@ else () endif () add_custom_target ( dictionary DEPENDS analyzer-dictionary generator-dictionary) add_custom_target ( dictionary-deb - COMMAND "${PROJECT_SOURCE_DIR}/createDictionaryDeb.sh" "${DEFAULT_DICT_DIR}" "${DEFAULT_DICT_NAME}" "${DICT_VERSION}" "${TARGET_DIR}" + COMMAND "${PROJECT_SOURCE_DIR}/createDictionaryDeb.sh" "${DEFAULT_DICT_DIR}" "${DEFAULT_DICT_NAME}" "${DICT_VERSION}" "${TARGET_DIR}" DEPENDS dictionary) +add_custom_target ( bin-deb + COMMAND "${PROJECT_SOURCE_DIR}/createBinDeb.sh" "${CMAKE_CURRENT_BINARY_DIR}" "${Morfeusz_LIB_VERSION}" "${ARCHITECTURE}" "${TARGET_DIR}" + DEPENDS morfeusz_analyzer morfeusz_generator) +add_custom_target ( lib-deb + COMMAND "${PROJECT_SOURCE_DIR}/createLibraryDeb.sh" "${CMAKE_CURRENT_BINARY_DIR}" "${Morfeusz_LIB_VERSION}" "${ARCHITECTURE}" ${DEFAULT_DICT_NAME} "${TARGET_DIR}" + DEPENDS libmorfeusz) +add_custom_target ( dev-deb + COMMAND "${PROJECT_SOURCE_DIR}/createDevDeb.sh" "${PROJECT_SOURCE_DIR}/morfeusz" "${Morfeusz_LIB_VERSION}" "${TARGET_DIR}" + DEPENDS "${PROJECT_SOURCE_DIR}/morfeusz/morfeusz2.h" "${PROJECT_SOURCE_DIR}/morfeusz/morfeusz2_c.h") + include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) @@ -100,7 +110,8 @@ add_subdirectory (wrappers) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") add_custom_target (morfeusz-repair-library - COMMAND ${INSTALL_NAME_TOOL} -id libmorfeusz2.dylib ${CMAKE_CURRENT_BINARY_DIR}/libmorfeusz2.dylib + COMMAND ${INSTALL_NAME_TOOL} -change /usr/x86_64-apple-darwin9/x86_64-apple-darwin9/lib/libstdc++.6.dylib /usr/lib/libstdc++.6.dylib ${CMAKE_CURRENT_BINARY_DIR}/libmorfeusz2.dylib + COMMAND ${INSTALL_NAME_TOOL} -id @executable_path/libmorfeusz2.dylib ${CMAKE_CURRENT_BINARY_DIR}/libmorfeusz2.dylib DEPENDS libmorfeusz) add_dependencies (morfeusz_analyzer morfeusz-repair-library) endif () @@ -114,10 +125,10 @@ endif () # INSTALL -if (NOT EMBEDDED_DEFAULT_DICT) - add_dependencies (libmorfeusz dictionary) - install (FILES "${ANALYZER_DICTIONARY_FILE}" "${GENERATOR_DICTIONARY_FILE}" DESTINATION "${DEFAULT_DICT_INSTALL_DIR}") -endif () +#if (NOT EMBEDDED_DEFAULT_DICT) +# add_dependencies (libmorfeusz dictionary) +# install (FILES "${ANALYZER_DICTIONARY_FILE}" "${GENERATOR_DICTIONARY_FILE}" DESTINATION "${DEFAULT_DICT_INSTALL_DIR}") +#endif () install (FILES morfeusz2.h morfeusz2_c.h DESTINATION include) install (TARGETS libmorfeusz DESTINATION ${TARGET_LIB_DIR}) diff --git a/morfeusz/wrappers/java/CMakeLists.txt b/morfeusz/wrappers/java/CMakeLists.txt index 619ce0a..ef9eaa5 100644 --- a/morfeusz/wrappers/java/CMakeLists.txt +++ b/morfeusz/wrappers/java/CMakeLists.txt @@ -45,10 +45,11 @@ set (CMAKE_JAVA_TARGET_OUTPUT_NAME jmorfeusz) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") get_filename_component (LIBMORFEUSZ_DIR ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY) add_custom_target (jmorfeusz-repair-libmorfeusz-link - COMMAND ${INSTALL_NAME_TOOL} -change ${LIBMORFEUSZ_DIR}/libmorfeusz2.dylib libmorfeusz2.dylib ${CMAKE_CURRENT_BINARY_DIR}/libjmorfeusz.jnilib + COMMAND ${INSTALL_NAME_TOOL} -change /usr/x86_64-apple-darwin9/x86_64-apple-darwin9/lib/libstdc++.6.dylib /usr/lib/libstdc++.6.dylib ${CMAKE_CURRENT_BINARY_DIR}/libjmorfeusz.jnilib + COMMAND ${INSTALL_NAME_TOOL} -change libmorfeusz2.dylib @executable_path/libmorfeusz2.dylib ${CMAKE_CURRENT_BINARY_DIR}/libjmorfeusz.jnilib DEPENDS libjmorfeusz) add_custom_target (jmorfeusz-repair-libjmorfeusz-id - COMMAND ${INSTALL_NAME_TOOL} -id libjmorfeusz.jnilib ${CMAKE_CURRENT_BINARY_DIR}/libjmorfeusz.jnilib + COMMAND ${INSTALL_NAME_TOOL} -id @executable_path/libjmorfeusz.jnilib ${CMAKE_CURRENT_BINARY_DIR}/libjmorfeusz.jnilib DEPENDS libjmorfeusz jmorfeusz-repair-libmorfeusz-link) endif () @@ -85,3 +86,8 @@ add_custom_target (jmorfeusz-copy-readme add_custom_target(package-java COMMAND mkdir -p "${TARGET_DIR}" && ${CMAKE_COMMAND} -E tar "cfvz" "${TARGET_DIR}/jmorfeusz-${JMORFEUSZ_VERSION}-${CMAKE_SYSTEM_NAME}-${ARCHITECTURE}.tar.gz" "${CMAKE_CURRENT_BINARY_DIR}/*.jar" "${CMAKE_CURRENT_BINARY_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}" "${CMAKE_CURRENT_BINARY_DIR}/README" DEPENDS jmorfeusz package-javadoc jmorfeusz-copy-readme libjmorfeusz) + +if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") + add_custom_target(java-deb + COMMAND "${PROJECT_SOURCE_DIR}/createJavaDeb.sh" "${CMAKE_CURRENT_BINARY_DIR}" "${Morfeusz_LIB_VERSION}" "${ARCHITECTURE}" "${TARGET_DIR}") +endif ()