Difference between revisions of "OpenOffice CMake Integration"
B michaelsen (talk | contribs) |
(Added example) |
||
Line 38: | Line 38: | ||
</pre> | </pre> | ||
to stop configuration process if OpenOffice.org SDK was not found. | to stop configuration process if OpenOffice.org SDK was not found. | ||
+ | |||
+ | === Usage example === | ||
+ | |||
+ | CMakeLists.txt from OOChemistry project (http://oochemistry.sourceforge.net) | ||
+ | |||
+ | <pre> | ||
+ | project(oochemistry Java) | ||
+ | cmake_minimum_required(VERSION 2.6) | ||
+ | |||
+ | set(CMAKE_MODULE_PATH "${oochemistry_SOURCE_DIR}/cmake/modules") | ||
+ | set(CLEAN_FILES | ||
+ | ${oochemistry_BINARY_DIR}/classes | ||
+ | ${oochemistry_BINARY_DIR}/cpreg | ||
+ | ${oochemistry_BINARY_DIR}/img | ||
+ | ${oochemistry_BINARY_DIR}/MANIFEST.MF | ||
+ | ${oochemistry_BINARY_DIR}/idlc.compile | ||
+ | ${oochemistry_BINARY_DIR}/regclass.properties | ||
+ | ${oochemistry_SOURCE_DIR}/dist | ||
+ | ) | ||
+ | set_directory_properties(PROPERTIES | ||
+ | ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_FILES}") | ||
+ | |||
+ | find_package(OpenOffice REQUIRED) | ||
+ | if(OpenOffice_VERSION LESS 300) | ||
+ | message("Warning! Your OpenOffice.org is too old, OOChemistry may not work with it!") | ||
+ | endif(OpenOffice_VERSION LESS 300) | ||
+ | |||
+ | find_file(ANT_EXECUTABLE NAMES ant) | ||
+ | mark_as_advanced(ANT_EXECUTABLE) | ||
+ | |||
+ | if(NOT ANT_EXECUTABLE) | ||
+ | message(FATAL_ERROR "Could not find unopkg executable") | ||
+ | endif(NOT ANT_EXECUTABLE) | ||
+ | message(STATUS "Found ant executable: ${ANT_EXECUTABLE}") | ||
+ | |||
+ | # Add JCP, Jmol, and "OOo library" to classpath | ||
+ | file(GLOB jars | ||
+ | "${OOO_URE_JAVA_DIR}/*.jar" | ||
+ | "${OOO_BASIS_DIR}/program/classes/*.jar" | ||
+ | # "${oochemistry_SOURCE_DIR}/lib/*.jar" | ||
+ | ) | ||
+ | foreach(jar ${jars}) | ||
+ | set(OOO_CLASSPATH "${jar}:${OOO_CLASSPATH}") | ||
+ | endforeach(jar ${jars}) | ||
+ | |||
+ | file(GLOB jars | ||
+ | ${jars} | ||
+ | "${oochemistry_SOURCE_DIR}/lib/*.jar" | ||
+ | ) | ||
+ | foreach(jar ${jars}) | ||
+ | set(OOCHEM_CLASSPATH "${jar}:${OOCHEM_CLASSPATH}") | ||
+ | endforeach(jar ${jars}) | ||
+ | |||
+ | # Generate build.xml | ||
+ | configure_file( | ||
+ | "${oochemistry_SOURCE_DIR}/build.xml.in" | ||
+ | "${oochemistry_SOURCE_DIR}/build.xml" | ||
+ | @ONLY | ||
+ | ) | ||
+ | |||
+ | # Generate properties file for cmake-initiated build | ||
+ | configure_file( | ||
+ | "${oochemistry_SOURCE_DIR}/oochemistry.properties.in" | ||
+ | "${oochemistry_BINARY_DIR}/oochemistry.properties" | ||
+ | @ONLY | ||
+ | ) | ||
+ | |||
+ | # Make NetBeans happy | ||
+ | # Don't forget to port changes in project to project.properties.in! | ||
+ | configure_file( | ||
+ | "${oochemistry_SOURCE_DIR}/nbproject/project.properties.in" | ||
+ | "${oochemistry_SOURCE_DIR}/nbproject/project.properties" | ||
+ | @ONLY | ||
+ | ) | ||
+ | |||
+ | option(VERBOSE_ANT "Run Ant in verbose mode" OFF) | ||
+ | if(VERBOSE_ANT) | ||
+ | set(VERBOSE_FLAG "-v") | ||
+ | else(VERBOSE_ANT) | ||
+ | set(VERBOSE_FLAG "") | ||
+ | endif(VERBOSE_ANT) | ||
+ | |||
+ | set(JAVAC_FLAGS "" CACHE STRING "Flags used by Java compiler") | ||
+ | |||
+ | # Build oochemistry.oxt | ||
+ | add_custom_target(oochemistry | ||
+ | ALL | ||
+ | WORKING_DIRECTORY "${oochemistry_SOURCE_DIR}" | ||
+ | COMMAND | ||
+ | ${ANT_EXECUTABLE} ${VERBOSE_FLAG} -Djavac.compilerargs="${JAVAC_FLAGS}" -propertyfile "${oochemistry_BINARY_DIR}/oochemistry.properties" uno-package | ||
+ | ) | ||
+ | |||
+ | add_custom_target(install | ||
+ | WORKING_DIRECTORY "${oochemistry_SOURCE_DIR}" | ||
+ | COMMAND ${UNOPKG_EXECUTABLE} add -f dist/oochemistry.oxt | ||
+ | ) | ||
+ | |||
+ | add_dependencies(install oochemistry) | ||
+ | </pre> | ||
[[Category:API]] | [[Category:API]] | ||
[[Category:Build System]] | [[Category:Build System]] | ||
[[Category:Effort]] | [[Category:Effort]] |
Revision as of 10:11, 24 June 2010
Overview
CMake is a cross-platform build system for build automation with support of popular programming languages including C++ and Java. Also, it could be used as a convenient configurator for existing build system.
Features
- Automatically finds the next OOo SDK version on Unix platforms:
- Official stable build of OOo SDK
- Official development build of OOo SDK
- Installation of OOo SDK, provided by Linux distribution (in most cases)
- Automatically skips all OpenOffice.org installations without SDK, found in the system
- Allows developer to override automatic choice of OOo SDK with custom path
After successful run module sets the next CMake variables:
- OpenOffice_FOUND - System has OpenOffice.org with SDK (logical)
- OpenOffice_VERSION - Version of OpenOffice.org with SDK
- OOO_PREFIX - Prefix of OpenOffice.org installation
- OOO_BASIS_DIR - "basis" directory of OpenOffice.org
- OOO_PROGRAM_DIR - "program" directory of OpenOffice.org
- OOO_URE_DIR - "ure" directory of OpenOffice.org
- OOO_SDK_DIR - "sdk" directory of OpenOffice.org
- OOO_INCLUDE_DIR - include directory of OpenOffice.org
- UNOPKG_EXECUTABLE - Absolute path of unopkg tool
CMake module "FindOpenOffice" can be downloaded here:
Finding OpenOffice.org SDK
To use it, download this file, uncompress it, copy into your project directory (it's traditional to use subdirectory cmake/modules/ for this purpose), and add line
find_package(OpenOffice)
into your CMakeLists.txt. It's needed to set variable CMAKE_MODULE_PATH in the beginning of project, see example below. If OpenOffice.org SDK is mandatory for building of your project, use
find_package(OpenOffice REQUIRED)
to stop configuration process if OpenOffice.org SDK was not found.
Usage example
CMakeLists.txt from OOChemistry project (http://oochemistry.sourceforge.net)
project(oochemistry Java) cmake_minimum_required(VERSION 2.6) set(CMAKE_MODULE_PATH "${oochemistry_SOURCE_DIR}/cmake/modules") set(CLEAN_FILES ${oochemistry_BINARY_DIR}/classes ${oochemistry_BINARY_DIR}/cpreg ${oochemistry_BINARY_DIR}/img ${oochemistry_BINARY_DIR}/MANIFEST.MF ${oochemistry_BINARY_DIR}/idlc.compile ${oochemistry_BINARY_DIR}/regclass.properties ${oochemistry_SOURCE_DIR}/dist ) set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_FILES}") find_package(OpenOffice REQUIRED) if(OpenOffice_VERSION LESS 300) message("Warning! Your OpenOffice.org is too old, OOChemistry may not work with it!") endif(OpenOffice_VERSION LESS 300) find_file(ANT_EXECUTABLE NAMES ant) mark_as_advanced(ANT_EXECUTABLE) if(NOT ANT_EXECUTABLE) message(FATAL_ERROR "Could not find unopkg executable") endif(NOT ANT_EXECUTABLE) message(STATUS "Found ant executable: ${ANT_EXECUTABLE}") # Add JCP, Jmol, and "OOo library" to classpath file(GLOB jars "${OOO_URE_JAVA_DIR}/*.jar" "${OOO_BASIS_DIR}/program/classes/*.jar" # "${oochemistry_SOURCE_DIR}/lib/*.jar" ) foreach(jar ${jars}) set(OOO_CLASSPATH "${jar}:${OOO_CLASSPATH}") endforeach(jar ${jars}) file(GLOB jars ${jars} "${oochemistry_SOURCE_DIR}/lib/*.jar" ) foreach(jar ${jars}) set(OOCHEM_CLASSPATH "${jar}:${OOCHEM_CLASSPATH}") endforeach(jar ${jars}) # Generate build.xml configure_file( "${oochemistry_SOURCE_DIR}/build.xml.in" "${oochemistry_SOURCE_DIR}/build.xml" @ONLY ) # Generate properties file for cmake-initiated build configure_file( "${oochemistry_SOURCE_DIR}/oochemistry.properties.in" "${oochemistry_BINARY_DIR}/oochemistry.properties" @ONLY ) # Make NetBeans happy # Don't forget to port changes in project to project.properties.in! configure_file( "${oochemistry_SOURCE_DIR}/nbproject/project.properties.in" "${oochemistry_SOURCE_DIR}/nbproject/project.properties" @ONLY ) option(VERBOSE_ANT "Run Ant in verbose mode" OFF) if(VERBOSE_ANT) set(VERBOSE_FLAG "-v") else(VERBOSE_ANT) set(VERBOSE_FLAG "") endif(VERBOSE_ANT) set(JAVAC_FLAGS "" CACHE STRING "Flags used by Java compiler") # Build oochemistry.oxt add_custom_target(oochemistry ALL WORKING_DIRECTORY "${oochemistry_SOURCE_DIR}" COMMAND ${ANT_EXECUTABLE} ${VERBOSE_FLAG} -Djavac.compilerargs="${JAVAC_FLAGS}" -propertyfile "${oochemistry_BINARY_DIR}/oochemistry.properties" uno-package ) add_custom_target(install WORKING_DIRECTORY "${oochemistry_SOURCE_DIR}" COMMAND ${UNOPKG_EXECUTABLE} add -f dist/oochemistry.oxt ) add_dependencies(install oochemistry)