diff options
author | Philipp Lohmann [pl] <Philipp.Lohmann@Oracle.COM> | 2011-03-23 18:06:39 +0100 |
---|---|---|
committer | Philipp Lohmann [pl] <Philipp.Lohmann@Oracle.COM> | 2011-03-23 18:06:39 +0100 |
commit | 961edfc01d4cb29caf8277fe755fc1952d9ff4d7 (patch) | |
tree | 1bf33d864d9a2e06db7ba4b1b7f1d5be05c4c5fb | |
parent | 7de3ced6186204e9e1c41c120eb19eac09f9d4a1 (diff) | |
parent | e3511dc343c944530c6c48e6990b4f4f8d522535 (diff) |
vcl2gnumake: rebase to DEV300m103
60 files changed, 2483 insertions, 1572 deletions
diff --git a/Module_ooo.mk b/Module_ooo.mk index 57be13948a3d..b4f0a24ab54f 100644 --- a/Module_ooo.mk +++ b/Module_ooo.mk @@ -31,6 +31,7 @@ $(eval $(call gb_Module_add_moduledirs,ooo,\ comphelper \ editeng \ framework \ + padmin \ sfx2 \ sot \ svl \ @@ -40,6 +41,7 @@ $(eval $(call gb_Module_add_moduledirs,ooo,\ toolkit \ tools \ vcl \ + unoxml \ xmloff \ vbahelper \ )) diff --git a/Repository.mk b/Repository.mk index 42a6b1474fd0..0df085200471 100755 --- a/Repository.mk +++ b/Repository.mk @@ -38,6 +38,10 @@ $(eval $(call gb_Helper_register_executables,NONE, \ sspretty \ )) +$(eval $(call gb_Helper_register_executables,OOO, \ + spadmin.bin \ +)) + $(eval $(call gb_Helper_register_libraries,OOOLIBS, \ AppleRemote \ avmedia \ @@ -74,6 +78,8 @@ $(eval $(call gb_Helper_register_libraries,OOOLIBS, \ tk \ tl \ utl \ + unordf \ + unoxml \ vbahelper \ vcl \ vclplug_gen \ @@ -91,10 +97,13 @@ $(eval $(call gb_Helper_register_libraries,PLAINLIBS_URE, \ )) $(eval $(call gb_Helper_register_libraries,PLAINLIBS_OOO, \ + cppunit \ icuuc \ icule \ graphite_dll \ cppunit \ + rdf \ + xslt \ )) @@ -136,6 +145,7 @@ $(eval $(call gb_Helper_register_static_libraries,PLAINLIBS, \ jpeglib \ ooopathutils \ salcpprt \ + vclmain \ zlib \ graphite \ vclmain \ diff --git a/RepositoryFixes.mk b/RepositoryFixes.mk index b7fcb29f56ef..f5776f7949d4 100755 --- a/RepositoryFixes.mk +++ b/RepositoryFixes.mk @@ -75,6 +75,8 @@ gb_Library_FILENAMES := $(patsubst tl:itl%,tl:itools%,$(gb_Library_FILENAMES)) gb_Library_FILENAMES := $(patsubst vbahelper:ivbahelper%,vbahelper:vbahelper%,$(gb_Library_FILENAMES)) gb_Library_FILENAMES := $(patsubst vos3:ivos3%,vos3:ivos%,$(gb_Library_FILENAMES)) gb_Library_FILENAMES := $(patsubst xml2:ixml2%,xml2:libxml2$(gb_Library_IARCEXT),$(gb_Library_FILENAMES)) +gb_Library_FILENAMES := $(patsubst xslt:ixslt%,xslt:libxslt$(gb_Library_IARCEXT),$(gb_Library_FILENAMES)) +gb_Library_FILENAMES := $(patsubst rdf:irdf%,rdf:librdf.dll$(gb_Library_IARCEXT),$(gb_Library_FILENAMES)) gb_Library_FILENAMES := $(patsubst z:iz%,z:zlib%,$(gb_Library_FILENAMES)) ifeq ($(gb_PRODUCT),$(true)) gb_Library_FILENAMES := $(patsubst stl:istl%,stl:stlport_vc71%,$(gb_Library_FILENAMES)) @@ -120,6 +122,8 @@ gb_Library_FILENAMES := $(patsubst tl:itl%,tl:itools%,$(gb_Library_FILENAMES)) gb_Library_FILENAMES := $(patsubst vbahelper:ivbahelper%,vbahelper:vbahelper%,$(gb_Library_FILENAMES)) gb_Library_FILENAMES := $(patsubst vos3:ivos3%,vos3:ivos%,$(gb_Library_FILENAMES)) gb_Library_FILENAMES := $(patsubst xml2:ixml2%,xml2:libxml2%,$(gb_Library_FILENAMES)) +gb_Library_FILENAMES := $(patsubst xslt:ixslt%,xslt:libxslt%,$(gb_Library_FILENAMES)) +gb_Library_FILENAMES := $(patsubst rdf:irdf%,rdf:librdf%,$(gb_Library_FILENAMES)) gb_Library_FILENAMES := $(patsubst z:iz%,z:zlib%,$(gb_Library_FILENAMES)) ifeq ($(gb_PRODUCT),$(true)) gb_Library_FILENAMES := $(patsubst stl:istl%,stl:stlport_vc71%,$(gb_Library_FILENAMES)) @@ -185,6 +189,14 @@ ifeq ($(SYSTEM_LIBXML),YES) gb_Library_TARGETS := $(filter-out xml2,$(gb_Library_TARGETS)) endif +ifeq ($(SYSTEM_LIBXSLT),YES) +gb_Library_TARGETS := $(filter-out xslt,$(gb_Library_TARGETS)) +endif + +ifeq ($(SYSTEM_REDLAND),YES) +gb_Library_TARGETS := $(filter-out rdf,$(gb_Library_TARGETS)) +endif + ifeq ($(SYSTEM_ICU),YES) gb_Library_TARGETS := $(filter-out icuuc,$(gb_Library_TARGETS)) endif diff --git a/configure b/configure index 98068283bdf7..f8c57a0e0727 100755 --- a/configure +++ b/configure @@ -309,7 +309,7 @@ ac_includes_default="\ # include <unistd.h> #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS EGREP AWK SED LOCAL_SOLENV _solenv UPD SOURCEVERSION build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os GNUTAR OSVERSION PTHREAD_CFLAGS PTHREAD_LIBS ENABLE_CRASHDUMP VC_STANDARD ENABLE_WERROR ENABLE_DEBUG PRODUCT PROFULLSWITCH PROEXT ENABLE_SYMBOLS DISABLE_STRIP ENABLE_CUPS ENABLE_FONTCONFIG TARFILE_LOCATION DO_FETCH_TARBALLS WITH_BINFILTER ENABLE_DIRECTX DISABLE_ACTIVEX DISABLE_ATL ENABLE_RPATH WITH_MYSPELL_DICTS SYSTEM_DICTS DICT_SYSTEM_DIR HYPH_SYSTEM_DIR THES_SYSTEM_DIR WITH_MINGWIN SHELLPATH GCC_HOME CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COMPATH GCCVER HAVE_LD_BSYMBOLIC_FUNCTIONS ENABLE_PCH GNUMAKE _cc HAVE_LD_HASH_STYLE PERL MSPDB_PATH COMEX USE_MINGW MIDL_PATH CSC_PATH FRAME_HOME CPP CXX CXXFLAGS ac_ct_CXX CXXCPP SIZEOF_LONG WORDS_BIGENDIAN LFS_CFLAGS PAM NEW_SHADOW_API PAM_LINK CRYPT_LINK GXX_INCLUDE_PATH MINGW_LIB_INCLUDE_PATH MINGW_BACKWARD_INCLUDE_PATH MINGW_CLIB_DIR MINGW_SHARED_GCCLIB MINGW_GCCLIB_EH MINGW_SHARED_GXXLIB MINGW_SHARED_LIBSTDCPP MINGW_GCCDLL MINGW_GXXDLL EXCEPTIONS STLPORT4 STLPORT_VER USE_SYSTEM_STL USE_CCACHE CCACHE HAVE_GCC_VISIBILITY_FEATURE ALLOC BUILD_VER_STRING SOLAR_JAVA JAVAINTERPRETER JAVACOMPILER JAVACISGCJ JAVADOC AWTLIB JAVAAOTCOMPILER JAVA_HOME JDK JAVAFLAGS JAVAIFLAGS DMAKE BUILD_DMAKE EPM DPKG PKGMK BUILD_EPM RPM PKGFORMAT GPERF BUILD_STAX MINGWCXX ac_ct_MINGWCXX MINGWSTRIP ac_ct_MINGWSTRIP BUILD_UNOWINREG SYSTEM_STDLIBS SYSTEM_ZLIB SYSTEM_JPEG SYSTEM_EXPAT PKG_CONFIG LIBWPD_CFLAGS LIBWPD_LIBS SYSTEM_LIBWPD CPPUNIT_CFLAGS CPPUNIT_LIBS SYSTEM_CPPUNIT FREETYPE_CFLAGS FREETYPE_LIBS USE_FT_EMBOLDEN LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC SYSTEM_LIBXSLT LIBXML_CFLAGS LIBXML_LIBS SYSTEM_LIBXML PYTHON PYTHON_VERSION PYTHON_PREFIX PYTHON_EXEC_PREFIX PYTHON_PLATFORM pythondir pkgpythondir pyexecdir pkgpyexecdir BZIP2 SYSTEM_PYTHON PYTHON_CFLAGS PYTHON_LIBS HOME SYSTEM_DB DB_VERSION DB_INCLUDES DB_JAR SYSTEM_LUCENE LUCENE_CORE_JAR LUCENE_ANALYZERS_JAR ENABLE_MYSQLC MYSQLCONFIG SYSTEM_MYSQL MYSQL_INC MYSQL_LIB MYSQL_DEFINES LIBMYSQL_PATH SYSTEM_MYSQL_CPPCONN SYSTEM_HSQLDB HSQLDB_JAR SYSTEM_BSH BSH_JAR SERIALIZER_JAR SYSTEM_SAXON SAXON_JAR CURLCONFIG SYSTEM_CURL CURL_CFLAGS CURL_LIBS SYSTEM_MDDS SYSTEM_BOOST SYSTEM_VIGRA SYSTEM_ODBC_HEADERS WITH_MOZILLA WITH_LDAP WITH_OPENLDAP MOZ_NSS_CFLAGS MOZ_NSS_LIBS NSS_LIB MOZ_NSPR_CFLAGS MOZ_NSPR_LIBS NSPR_LIB MOZILLAXPCOM_CFLAGS MOZILLAXPCOM_LIBS MOZILLA_VERSION MOZILLA_TOOLKIT MOZGTK2_CFLAGS MOZGTK2_LIBS MOZLIBREQ_CFLAGS MOZLIBREQ_LIBS BUILD_MOZAB ENABLE_NSS_MODULE MOZILLABUILD SYSTEM_MOZILLA MOZ_FLAVOUR MOZ_INC MOZ_LIB MOZ_LIB_XPCOM MOZ_LDAP_CFLAGS SYSTEM_SANE_HEADER SYSTEM_GENBRK SYSTEM_GENCCODE SYSTEM_GENCMN SYSTEM_ICU GRAPHITE_CFLAGS GRAPHITE_LIBS ENABLE_GRAPHITE SYSTEM_GRAPHITE X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS XINC XLIB XAU_LIBS DISABLE_XAW SYSTEM_XRENDER_HEADERS XRENDER_LINK XRANDR_CFLAGS XRANDR_LIBS XRANDR_DLOPEN ENABLE_RANDR DISABLE_NEON NEON_CFLAGS NEON_LIBS SYSTEM_NEON NEON_VERSION OPENSSL_CFLAGS OPENSSL_LIBS SYSTEM_OPENSSL ENABLE_AGG AGG_CFLAGS AGG_LIBS SYSTEM_AGG AGG_VERSION REDLAND_CFLAGS REDLAND_LIBS SYSTEM_REDLAND HUNSPELL_CFLAGS HUNSPELL_LIBS SYSTEM_HUNSPELL SYSTEM_HYPH HYPHEN_LIB MYTHES_CFLAGS MYTHES_LIBS SYSTEM_MYTHES SYSTEM_LPSOLVE SYSTEM_LIBTEXTCAT SYSTEM_LIBTEXTCAT_DATA HAVE_GETOPT HAVE_READDIR_R SYSTEM_LIBC PSDK_HOME WINDOWS_VISTA_PSDK DIRECTXSDK_HOME DIRECTXSDK_LIB NSIS_PATH BISON FLEX PATCH GNUCP GNUPATCH CYGWIN_PATH ML_EXE ASM_HOME ZIP UNZIP ZIP_HOME ENABLE_GTK ENABLE_KDE ENABLE_KDE4 GCONF_CFLAGS GCONF_LIBS ENABLE_GCONF GNOMEVFS_CFLAGS GNOMEVFS_LIBS ENABLE_GNOMEVFS GTK_CFLAGS GTK_LIBS DBUS_CFLAGS DBUS_LIBS GIO_CFLAGS GIO_LIBS ENABLE_GIO ENABLE_DBUS ENABLE_SYSTRAY_GTK GSTREAMER_CFLAGS GSTREAMER_LIBS ENABLE_GSTREAMER CAIRO_CFLAGS CAIRO_LIBS ENABLE_CAIRO BUILD_PIXMAN SYSTEM_CAIRO ENABLE_OPENGL ENABLE_PRESENTER_EXTRA_UI ENABLE_MINIMIZER ENABLE_PRESENTER_SCREEN POPPLER_CFLAGS POPPLER_LIBS ENABLE_PDFIMPORT SYSTEM_POPPLER ENABLE_MEDIAWIKI SYSTEM_SERVLETAPI SERVLETAPI_JAR ENABLE_REPORTBUILDER SYSTEM_JFREEREPORT SAC_JAR LIBXML_JAR FLUTE_JAR JFREEREPORT_JAR LIBBASE_JAR LIBLAYOUT_JAR LIBLOADER_JAR LIBFORMULA_JAR LIBREPOSITORY_JAR LIBFONTS_JAR LIBSERIALIZER_JAR SYSTEM_APACHE_COMMONS COMMONS_CODEC_JAR COMMONS_LANG_JAR COMMONS_HTTPCLIENT_JAR COMMONS_LOGGING_JAR MOC KDE_CFLAGS KDE_LIBS MOC4 KDE4_CFLAGS KDE4_LIBS ENABLE_LOCKDOWN GOBJECT_CFLAGS GOBJECT_LIBS ENABLE_EVOAB2 ENABLE_KAB WITH_FONTS WITHOUT_PPDS WITHOUT_AFMS SCPDEFS USE_XINERAMA XINERAMA_LINK ANT ANT_HOME ANT_LIB OOO_JUNIT_JAR WITH_LANG WITH_POOR_HELP_LOCALIZATIONS WITH_DICT INTRO_BITMAPS ABOUT_BITMAPS OOO_VENDOR UNIXWRAPPERNAME ENABLE_STATIC_GTK ENABLE_LAYOUT VERBOSE nodep LOCAL_SOLVER BUILD_TYPE LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS EGREP AWK SED LOCAL_SOLENV _solenv UPD SOURCEVERSION build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os GNUTAR OSVERSION PTHREAD_CFLAGS PTHREAD_LIBS ENABLE_CRASHDUMP VC_STANDARD ENABLE_WERROR ENABLE_DEBUG PRODUCT PROFULLSWITCH PROEXT ENABLE_SYMBOLS DISABLE_STRIP ENABLE_CUPS ENABLE_FONTCONFIG TARFILE_LOCATION DO_FETCH_TARBALLS WITH_BINFILTER ENABLE_DIRECTX DISABLE_ACTIVEX DISABLE_ATL ENABLE_RPATH WITH_MYSPELL_DICTS SYSTEM_DICTS DICT_SYSTEM_DIR HYPH_SYSTEM_DIR THES_SYSTEM_DIR WITH_MINGWIN SHELLPATH GCC_HOME CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COMPATH GCCVER HAVE_LD_BSYMBOLIC_FUNCTIONS ENABLE_PCH GNUMAKE _cc HAVE_LD_HASH_STYLE PERL MSPDB_PATH COMEX USE_MINGW MIDL_PATH CSC_PATH FRAME_HOME CPP CXX CXXFLAGS ac_ct_CXX CXXCPP SIZEOF_LONG WORDS_BIGENDIAN LFS_CFLAGS VALGRIND_CFLAGS PAM NEW_SHADOW_API PAM_LINK CRYPT_LINK GXX_INCLUDE_PATH MINGW_LIB_INCLUDE_PATH MINGW_BACKWARD_INCLUDE_PATH MINGW_CLIB_DIR MINGW_SHARED_GCCLIB MINGW_GCCLIB_EH MINGW_SHARED_GXXLIB MINGW_SHARED_LIBSTDCPP MINGW_GCCDLL MINGW_GXXDLL EXCEPTIONS STLPORT4 STLPORT_VER USE_SYSTEM_STL USE_CCACHE CCACHE HAVE_GCC_VISIBILITY_FEATURE ALLOC BUILD_VER_STRING SOLAR_JAVA JAVAINTERPRETER JAVACOMPILER JAVACISGCJ JAVADOC AWTLIB JAVAAOTCOMPILER JAVA_HOME JDK JAVAFLAGS JAVAIFLAGS DMAKE BUILD_DMAKE EPM DPKG PKGMK BUILD_EPM RPM PKGFORMAT GPERF BUILD_STAX MINGWCXX ac_ct_MINGWCXX MINGWSTRIP ac_ct_MINGWSTRIP BUILD_UNOWINREG SYSTEM_STDLIBS SYSTEM_ZLIB SYSTEM_JPEG SYSTEM_EXPAT PKG_CONFIG LIBWPD_CFLAGS LIBWPD_LIBS SYSTEM_LIBWPD CPPUNIT_CFLAGS CPPUNIT_LIBS SYSTEM_CPPUNIT FREETYPE_CFLAGS FREETYPE_LIBS USE_FT_EMBOLDEN LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC SYSTEM_LIBXSLT LIBXML_CFLAGS LIBXML_LIBS SYSTEM_LIBXML PYTHON PYTHON_VERSION PYTHON_PREFIX PYTHON_EXEC_PREFIX PYTHON_PLATFORM pythondir pkgpythondir pyexecdir pkgpyexecdir BZIP2 SYSTEM_PYTHON PYTHON_CFLAGS PYTHON_LIBS HOME SYSTEM_DB DB_VERSION DB_INCLUDES DB_JAR SYSTEM_LUCENE LUCENE_CORE_JAR LUCENE_ANALYZERS_JAR ENABLE_MYSQLC MYSQLCONFIG SYSTEM_MYSQL MYSQL_INC MYSQL_LIB MYSQL_DEFINES LIBMYSQL_PATH SYSTEM_MYSQL_CPPCONN SYSTEM_HSQLDB HSQLDB_JAR SYSTEM_BSH BSH_JAR SERIALIZER_JAR SYSTEM_SAXON SAXON_JAR CURLCONFIG SYSTEM_CURL CURL_CFLAGS CURL_LIBS SYSTEM_MDDS SYSTEM_BOOST SYSTEM_VIGRA SYSTEM_ODBC_HEADERS WITH_MOZILLA WITH_LDAP WITH_OPENLDAP MOZ_NSS_CFLAGS MOZ_NSS_LIBS NSS_LIB MOZ_NSPR_CFLAGS MOZ_NSPR_LIBS NSPR_LIB MOZILLAXPCOM_CFLAGS MOZILLAXPCOM_LIBS MOZILLA_VERSION MOZILLA_TOOLKIT MOZGTK2_CFLAGS MOZGTK2_LIBS MOZLIBREQ_CFLAGS MOZLIBREQ_LIBS BUILD_MOZAB ENABLE_NSS_MODULE MOZILLABUILD SYSTEM_MOZILLA MOZ_FLAVOUR MOZ_INC MOZ_LIB MOZ_LIB_XPCOM MOZ_LDAP_CFLAGS SYSTEM_SANE_HEADER SYSTEM_GENBRK SYSTEM_GENCCODE SYSTEM_GENCMN ICUCONFIG SYSTEM_ICU ICU_MAJOR ICU_MINOR ICU_MICRO GRAPHITE_CFLAGS GRAPHITE_LIBS ENABLE_GRAPHITE SYSTEM_GRAPHITE X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS XINC XLIB XAU_LIBS DISABLE_XAW SYSTEM_XRENDER_HEADERS XRENDER_LINK XRANDR_CFLAGS XRANDR_LIBS XRANDR_DLOPEN ENABLE_RANDR DISABLE_NEON NEON_CFLAGS NEON_LIBS SYSTEM_NEON NEON_VERSION OPENSSL_CFLAGS OPENSSL_LIBS SYSTEM_OPENSSL ENABLE_AGG AGG_CFLAGS AGG_LIBS SYSTEM_AGG AGG_VERSION REDLAND_CFLAGS REDLAND_LIBS SYSTEM_REDLAND HUNSPELL_CFLAGS HUNSPELL_LIBS SYSTEM_HUNSPELL SYSTEM_HYPH HYPHEN_LIB MYTHES_CFLAGS MYTHES_LIBS SYSTEM_MYTHES SYSTEM_LPSOLVE SYSTEM_LIBTEXTCAT SYSTEM_LIBTEXTCAT_DATA HAVE_GETOPT HAVE_READDIR_R SYSTEM_LIBC PSDK_HOME WINDOWS_VISTA_PSDK DIRECTXSDK_HOME DIRECTXSDK_LIB NSIS_PATH BISON FLEX PATCH GNUCP GNUPATCH CYGWIN_PATH ML_EXE ASM_HOME ZIP UNZIP ZIP_HOME ENABLE_GTK ENABLE_KDE ENABLE_KDE4 GCONF_CFLAGS GCONF_LIBS ENABLE_GCONF GNOMEVFS_CFLAGS GNOMEVFS_LIBS ENABLE_GNOMEVFS GTK_CFLAGS GTK_LIBS DBUS_CFLAGS DBUS_LIBS GIO_CFLAGS GIO_LIBS ENABLE_GIO ENABLE_DBUS ENABLE_SYSTRAY_GTK GSTREAMER_CFLAGS GSTREAMER_LIBS ENABLE_GSTREAMER CAIRO_CFLAGS CAIRO_LIBS ENABLE_CAIRO BUILD_PIXMAN SYSTEM_CAIRO ENABLE_OPENGL ENABLE_PRESENTER_EXTRA_UI ENABLE_MINIMIZER ENABLE_PRESENTER_SCREEN POPPLER_CFLAGS POPPLER_LIBS ENABLE_PDFIMPORT SYSTEM_POPPLER ENABLE_MEDIAWIKI SYSTEM_SERVLETAPI SERVLETAPI_JAR ENABLE_REPORTBUILDER SYSTEM_JFREEREPORT SAC_JAR LIBXML_JAR FLUTE_JAR JFREEREPORT_JAR LIBBASE_JAR LIBLAYOUT_JAR LIBLOADER_JAR LIBFORMULA_JAR LIBREPOSITORY_JAR LIBFONTS_JAR LIBSERIALIZER_JAR SYSTEM_APACHE_COMMONS COMMONS_CODEC_JAR COMMONS_LANG_JAR COMMONS_HTTPCLIENT_JAR COMMONS_LOGGING_JAR MOC KDE_CFLAGS KDE_LIBS MOC4 KDE4_CFLAGS KDE4_LIBS ENABLE_LOCKDOWN GOBJECT_CFLAGS GOBJECT_LIBS ENABLE_EVOAB2 ENABLE_KAB WITH_FONTS WITHOUT_PPDS WITHOUT_AFMS SCPDEFS USE_XINERAMA XINERAMA_LINK ANT ANT_HOME ANT_LIB OOO_JUNIT_JAR WITH_LANG WITH_POOR_HELP_LOCALIZATIONS WITH_DICT INTRO_BITMAPS ABOUT_BITMAPS OOO_VENDOR UNIXWRAPPERNAME ENABLE_STATIC_GTK ENABLE_LAYOUT VERBOSE nodep LOCAL_SOLVER BUILD_TYPE LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -8129,6 +8129,452 @@ if test -n "$ac_cv_sys_large_files" && test "$ac_cv_sys_large_files" != "no"; th fi +if test -n "$enable_dbgutil" && test "$enable_dbgutil" != "no"; then + VALGRIND_CFLAGS="" + prev_cppflags=$CPPFLAGS + if test -z "$VALGRIND_CFLAGS"; then + CPPFLAGS="-I/usr/include/valgrind" + if test "${ac_cv_header_valgrind_h+set}" = set; then + echo "$as_me:$LINENO: checking for valgrind.h" >&5 +echo $ECHO_N "checking for valgrind.h... $ECHO_C" >&6 +if test "${ac_cv_header_valgrind_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_valgrind_h" >&5 +echo "${ECHO_T}$ac_cv_header_valgrind_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking valgrind.h usability" >&5 +echo $ECHO_N "checking valgrind.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <valgrind.h> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking valgrind.h presence" >&5 +echo $ECHO_N "checking valgrind.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <valgrind.h> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: valgrind.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: valgrind.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: valgrind.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: valgrind.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: valgrind.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: valgrind.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: valgrind.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: valgrind.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: valgrind.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: valgrind.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for valgrind.h" >&5 +echo $ECHO_N "checking for valgrind.h... $ECHO_C" >&6 +if test "${ac_cv_header_valgrind_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_valgrind_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_valgrind_h" >&5 +echo "${ECHO_T}$ac_cv_header_valgrind_h" >&6 + +fi +if test $ac_cv_header_valgrind_h = yes; then + VALGRIND_CFLAGS=$CPPFLAGS +else + unset ac_cv_header_valgrind_h +fi + + + fi + if test -z "$VALGRIND_CFLAGS"; then + CPPFLAGS="-I/usr/local/include/valgrind" + if test "${ac_cv_header_valgrind_h+set}" = set; then + echo "$as_me:$LINENO: checking for valgrind.h" >&5 +echo $ECHO_N "checking for valgrind.h... $ECHO_C" >&6 +if test "${ac_cv_header_valgrind_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_valgrind_h" >&5 +echo "${ECHO_T}$ac_cv_header_valgrind_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking valgrind.h usability" >&5 +echo $ECHO_N "checking valgrind.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <valgrind.h> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking valgrind.h presence" >&5 +echo $ECHO_N "checking valgrind.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <valgrind.h> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: valgrind.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: valgrind.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: valgrind.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: valgrind.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: valgrind.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: valgrind.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: valgrind.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: valgrind.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: valgrind.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: valgrind.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: valgrind.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for valgrind.h" >&5 +echo $ECHO_N "checking for valgrind.h... $ECHO_C" >&6 +if test "${ac_cv_header_valgrind_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_valgrind_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_valgrind_h" >&5 +echo "${ECHO_T}$ac_cv_header_valgrind_h" >&6 + +fi +if test $ac_cv_header_valgrind_h = yes; then + VALGRIND_CFLAGS=$CPPFLAGS +fi + + + fi + if test -n "$VALGRIND_CFLAGS"; then + CPPFLAGS=$VALGRIND_CFLAGS + if test "${ac_cv_header_memcheck_h+set}" = set; then + echo "$as_me:$LINENO: checking for memcheck.h" >&5 +echo $ECHO_N "checking for memcheck.h... $ECHO_C" >&6 +if test "${ac_cv_header_memcheck_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_memcheck_h" >&5 +echo "${ECHO_T}$ac_cv_header_memcheck_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking memcheck.h usability" >&5 +echo $ECHO_N "checking memcheck.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <memcheck.h> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking memcheck.h presence" >&5 +echo $ECHO_N "checking memcheck.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <memcheck.h> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: memcheck.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: memcheck.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: memcheck.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: memcheck.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: memcheck.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: memcheck.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: memcheck.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: memcheck.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: memcheck.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: memcheck.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: memcheck.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: memcheck.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: memcheck.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: memcheck.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: memcheck.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: memcheck.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for memcheck.h" >&5 +echo $ECHO_N "checking for memcheck.h... $ECHO_C" >&6 +if test "${ac_cv_header_memcheck_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_memcheck_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_memcheck_h" >&5 +echo "${ECHO_T}$ac_cv_header_memcheck_h" >&6 + +fi +if test $ac_cv_header_memcheck_h = yes; then + : +else + VALGRIND_CFLAGS="" +fi + + + fi + CPPFLAGS=$prev_cppflags +fi + + if test "$test_cups" = "yes" -a "$ENABLE_CUPS" = "TRUE" ; then if test "${ac_cv_header_cups_cups_h+set}" = set; then echo "$as_me:$LINENO: checking for cups/cups.h" >&5 @@ -12514,11 +12960,11 @@ echo "$as_me: error: no" >&2;} echo "${ECHO_T}yes" >&6 fi if echo "$WITH_MINGWIN" | $EGREP -q "/"; then - if ! test -x "`echo $WITH_MINGWIN | $SED -e s/g++/strip/`"; then MINGSTRIP=false; else MINGWSTRIP=$(basename $(echo $WITH_MINGWIN | $SED -e s/g++/strip/)); fi + if ! test -x "`echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/`"; then MINGSTRIP=false; else MINGWSTRIP=$(basename $(echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/)); fi else if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}`echo $WITH_MINGWIN | $SED -e s/g++/strip/`", so it can be a program name with args. -set dummy ${ac_tool_prefix}`echo $WITH_MINGWIN | $SED -e s/g++/strip/`; ac_word=$2 + # Extract the first word of "${ac_tool_prefix}`echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/`", so it can be a program name with args. +set dummy ${ac_tool_prefix}`echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/`; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MINGWSTRIP+set}" = set; then @@ -12534,7 +12980,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MINGWSTRIP="${ac_tool_prefix}`echo $WITH_MINGWIN | $SED -e s/g++/strip/`" + ac_cv_prog_MINGWSTRIP="${ac_tool_prefix}`echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/`" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -12555,8 +13001,8 @@ fi fi if test -z "$ac_cv_prog_MINGWSTRIP"; then ac_ct_MINGWSTRIP=$MINGWSTRIP - # Extract the first word of "`echo $WITH_MINGWIN | $SED -e s/g++/strip/`", so it can be a program name with args. -set dummy `echo $WITH_MINGWIN | $SED -e s/g++/strip/`; ac_word=$2 + # Extract the first word of "`echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/`", so it can be a program name with args. +set dummy `echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/`; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_MINGWSTRIP+set}" = set; then @@ -12572,7 +13018,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_MINGWSTRIP="`echo $WITH_MINGWIN | $SED -e s/g++/strip/`" + ac_cv_prog_ac_ct_MINGWSTRIP="`echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/`" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -19379,6 +19825,12 @@ echo "$as_me: error: icu headers not found." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + # Extract the first word of "genbrk", so it can be a program name with args. set dummy genbrk; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 @@ -19514,62 +19966,61 @@ fi echo "$as_me: error: \\"gencmn\\" not found in \$PATH, install the icu development tool \\"gencmn\"\" >&2;} { (exit 1); exit 1; }; } fi - echo "$as_me:$LINENO: checking ICU version" >&5 -echo $ECHO_N "checking ICU version... $ECHO_C" >&6 - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <unicode/uversion.h> + # Extract the first word of "icu-config", so it can be a program name with args. +set dummy icu-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_ICUCONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $ICUCONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICUCONFIG="$ICUCONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ICUCONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done -int main(int argc, char **argv) { - if(U_ICU_VERSION_MAJOR_NUM < 4) - return 1; - else - return 0; -} + ;; +esac +fi +ICUCONFIG=$ac_cv_path_ICUCONFIG -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: OK" >&5 -echo "${ECHO_T}OK" >&6 +if test -n "$ICUCONFIG"; then + echo "$as_me:$LINENO: result: $ICUCONFIG" >&5 +echo "${ECHO_T}$ICUCONFIG" >&6 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: not suitable, only >= 4.0 supported currently" >&5 + echo "$as_me:$LINENO: checking ICU version" >&5 +echo $ECHO_N "checking ICU version... $ECHO_C" >&6 + ICU_VERSION=`$ICUCONFIG --version` + ICU_MAJOR=`$ICUCONFIG --version | cut -d"." -f1` + ICU_MINOR=`$ICUCONFIG --version | cut -d"." -f2` + ICU_MICRO=`$ICUCONFIG --version | cut -d"." -f3` + + if test "$ICU_MAJOR" -ge "4"; then + echo "$as_me:$LINENO: result: OK" >&5 +echo "${ECHO_T}OK" >&6 + else + { { echo "$as_me:$LINENO: error: not suitable, only >= 4.0 supported currently" >&5 echo "$as_me: error: not suitable, only >= 4.0 supported currently" >&2;} { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu + fi else echo "$as_me:$LINENO: result: internal" >&5 @@ -19583,6 +20034,9 @@ fi + + + echo "$as_me:$LINENO: checking whether to enable graphite support" >&5 echo $ECHO_N "checking whether to enable graphite support... $ECHO_C" >&6 if test "$_os" = "WINNT" -o "$_os" = "Linux" && test "z$enable_graphite" = "z" -o "$enable_graphite" != "no" ; then @@ -30952,6 +31406,7 @@ s,@CXXCPP@,$CXXCPP,;t t s,@SIZEOF_LONG@,$SIZEOF_LONG,;t t s,@WORDS_BIGENDIAN@,$WORDS_BIGENDIAN,;t t s,@LFS_CFLAGS@,$LFS_CFLAGS,;t t +s,@VALGRIND_CFLAGS@,$VALGRIND_CFLAGS,;t t s,@PAM@,$PAM,;t t s,@NEW_SHADOW_API@,$NEW_SHADOW_API,;t t s,@PAM_LINK@,$PAM_LINK,;t t @@ -31096,7 +31551,11 @@ s,@SYSTEM_SANE_HEADER@,$SYSTEM_SANE_HEADER,;t t s,@SYSTEM_GENBRK@,$SYSTEM_GENBRK,;t t s,@SYSTEM_GENCCODE@,$SYSTEM_GENCCODE,;t t s,@SYSTEM_GENCMN@,$SYSTEM_GENCMN,;t t +s,@ICUCONFIG@,$ICUCONFIG,;t t s,@SYSTEM_ICU@,$SYSTEM_ICU,;t t +s,@ICU_MAJOR@,$ICU_MAJOR,;t t +s,@ICU_MINOR@,$ICU_MINOR,;t t +s,@ICU_MICRO@,$ICU_MICRO,;t t s,@GRAPHITE_CFLAGS@,$GRAPHITE_CFLAGS,;t t s,@GRAPHITE_LIBS@,$GRAPHITE_LIBS,;t t s,@ENABLE_GRAPHITE@,$ENABLE_GRAPHITE,;t t diff --git a/configure.in b/configure.in index 92add6148851..b9fec5b18f25 100644 --- a/configure.in +++ b/configure.in @@ -1946,6 +1946,30 @@ fi AC_SUBST(LFS_CFLAGS) dnl =================================================================== +dnl Check if valgrind.h is available +dnl =================================================================== +if test -n "$enable_dbgutil" && test "$enable_dbgutil" != "no"; then + dnl Test $prefix (currently only testing for /usr and /usr/local) + dnl so that VALGRIND_CFLAGS = -I$prefix/include/valgrind + VALGRIND_CFLAGS="" + prev_cppflags=$CPPFLAGS + if test -z "$VALGRIND_CFLAGS"; then + CPPFLAGS="-I/usr/include/valgrind" + AC_CHECK_HEADER([valgrind.h], [VALGRIND_CFLAGS=$CPPFLAGS], [unset ac_cv_header_valgrind_h]) + fi + if test -z "$VALGRIND_CFLAGS"; then + CPPFLAGS="-I/usr/local/include/valgrind" + AC_CHECK_HEADER([valgrind.h], [VALGRIND_CFLAGS=$CPPFLAGS], []) + fi + if test -n "$VALGRIND_CFLAGS"; then + CPPFLAGS=$VALGRIND_CFLAGS + AC_CHECK_HEADER([memcheck.h], [], [VALGRIND_CFLAGS=""]) + fi + CPPFLAGS=$prev_cppflags +fi +AC_SUBST([VALGRIND_CFLAGS]) + +dnl =================================================================== dnl Check if cups/cups.h is available dnl =================================================================== if test "$test_cups" = "yes" -a "$ENABLE_CUPS" = "TRUE" ; then @@ -3458,9 +3482,9 @@ if test "z$enable_odk" = "z" -o "$enable_odk" != "no"; then AC_MSG_RESULT(yes) fi if echo "$WITH_MINGWIN" | $EGREP -q "/"; then - if ! test -x "`echo $WITH_MINGWIN | $SED -e s/g++/strip/`"; then MINGSTRIP=false; else MINGWSTRIP=$(basename $(echo $WITH_MINGWIN | $SED -e s/g++/strip/)); fi + if ! test -x "`echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/`"; then MINGSTRIP=false; else MINGWSTRIP=$(basename $(echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/)); fi else - AC_CHECK_TOOL(MINGWSTRIP, `echo $WITH_MINGWIN | $SED -e s/g++/strip/`, false) + AC_CHECK_TOOL(MINGWSTRIP, `echo $WITH_MINGWIN | $SED -e s/g++/strip/ | $SED -e s/c++/strip/`, false) fi if test "$MINGWSTRIP" = "false"; then AC_MSG_ERROR(MinGW32 binutils needed. Install them.) @@ -4657,6 +4681,7 @@ if test -n "$with_system_icu" -o -n "$with_system_libs" && \ AC_LANG_PUSH([C++]) AC_MSG_CHECKING([for unicode/rbbi.h]) AC_TRY_CPP(unicode/rbbi.h, AC_MSG_RESULT([checked.]), AC_MSG_ERROR([icu headers not found.])) + AC_LANG_POP([C++]) AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin]) if test -z "$SYSTEM_GENBRK"; then AC_MSG_ERROR([\"genbrk\" not found in \$PATH, install the icu development tool \"genbrk"\]) @@ -4669,18 +4694,20 @@ if test -n "$with_system_icu" -o -n "$with_system_libs" && \ if test -z "$SYSTEM_GENCMN"; then AC_MSG_ERROR([\"gencmn\" not found in \$PATH, install the icu development tool \"gencmn"\]) fi + + AC_PATH_PROG( ICUCONFIG, icu-config) AC_MSG_CHECKING([ICU version]) - AC_TRY_RUN([ -#include <unicode/uversion.h> + ICU_VERSION=`$ICUCONFIG --version` + ICU_MAJOR=`$ICUCONFIG --version | cut -d"." -f1` + ICU_MINOR=`$ICUCONFIG --version | cut -d"." -f2` + ICU_MICRO=`$ICUCONFIG --version | cut -d"." -f3` + + if test "$ICU_MAJOR" -ge "4"; then + AC_MSG_RESULT([OK]) + else + AC_MSG_ERROR([not suitable, only >= 4.0 supported currently]) + fi -int main(int argc, char **argv) { - if(U_ICU_VERSION_MAJOR_NUM < 4) - return 1; - else - return 0; -} - ], [AC_MSG_RESULT(OK)], [AC_MSG_ERROR([not suitable, only >= 4.0 supported currently])]) - AC_LANG_POP([C++]) else AC_MSG_RESULT([internal]) SYSTEM_ICU=NO @@ -4690,6 +4717,9 @@ AC_SUBST(SYSTEM_ICU) AC_SUBST(SYSTEM_GENBRK) AC_SUBST(SYSTEM_GENCCODE) AC_SUBST(SYSTEM_GENCMN) +AC_SUBST(ICU_MAJOR) +AC_SUBST(ICU_MINOR) +AC_SUBST(ICU_MICRO) dnl =================================================================== dnl Graphite diff --git a/dmake/config.h.in b/dmake/config.h.in index c8aa63a861b9..ed639aa99b03 100644 --- a/dmake/config.h.in +++ b/dmake/config.h.in @@ -55,6 +55,9 @@ /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ #undef HAVE_NDIR_H +/* Define to 1 if you have the `setenv' function. */ +#undef HAVE_SETENV + /* Define to 1 if you have the `settz' function. */ #undef HAVE_SETTZ diff --git a/dmake/configure b/dmake/configure index f8a1bd822914..7e6d05ab8a65 100755 --- a/dmake/configure +++ b/dmake/configure @@ -7437,7 +7437,7 @@ done -for ac_func in getcwd getwd strerror setvbuf tzset settz mkstemp tempnam gettimeofday +for ac_func in getcwd getwd strerror setvbuf tzset settz mkstemp tempnam gettimeofday setenv do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 diff --git a/dmake/configure.in b/dmake/configure.in index 498c7b2372de..c903d94faab8 100755 --- a/dmake/configure.in +++ b/dmake/configure.in @@ -211,7 +211,7 @@ AC_FUNC_MEMCMP AC_TYPE_SIGNAL AC_FUNC_UTIME_NULL AC_FUNC_VPRINTF -AC_CHECK_FUNCS(getcwd getwd strerror setvbuf tzset settz mkstemp tempnam gettimeofday) +AC_CHECK_FUNCS(getcwd getwd strerror setvbuf tzset settz mkstemp tempnam gettimeofday setenv) # Usefull, but special to newlib/MSVC AC_CHECK_FUNCS(strlwr) diff --git a/dmake/dmake.c b/dmake/dmake.c index b96bf4ce3146..ddfe3a88ad06 100644 --- a/dmake/dmake.c +++ b/dmake/dmake.c @@ -380,16 +380,19 @@ char **argv; _warn = TRUE; /* If -r was not given find and parse startup-makefile. */ - if( Rules ) { - char *fname; - - /* Search_file() also checks the environment variable. */ - if( (mkfil=Search_file("MAKESTARTUP", &fname)) != NIL(FILE) ) { - Parse(mkfil); - Def_macro( "MAKESTARTUP", fname, M_EXPANDED|M_MULTI|M_FORCE ); - } - else - Fatal( "Configuration file `%s' not found", fname ); + if( Rules ) + { + char *fname = NIL(char); + + /* Search_file() also checks the environment variable. */ + if( (mkfil=Search_file("MAKESTARTUP", &fname)) != NIL(FILE) ) + { + Parse(mkfil); + Def_macro( "MAKESTARTUP", fname, M_EXPANDED|M_MULTI|M_FORCE ); + } + else + Fatal( "Configuration file `%s' not found", fname ); + if ( fname != NIL(char)) { FREE( fname ); fname = NIL(char); } } /* Define the targets set on the command line now. */ @@ -428,8 +431,7 @@ char **argv; char *p; if( strcmp(f, "stdin") == 0 ) f = "-"; - p = DmStrAdd( "-f", f, FALSE ); - Def_macro( "MAKEFILE", p, M_PRECIOUS|M_NOEXPORT ); + Def_macro( "MAKEFILE", p = DmStrAdd( "-f", f, FALSE ), M_PRECIOUS|M_NOEXPORT ); FREE(p); Parse( mkfil ); } else if( !Rules ) @@ -663,23 +665,25 @@ char **rname; */ if( (hp = GET_MACRO(macname)) != NIL(HASH) ) { - /* Only expand if needed. */ - if( hp->ht_flag & M_EXPANDED ) { - ename = fname = DmStrDup(hp->ht_value); - } else { - ename = fname = Expand(hp->ht_value); - } + /* Only expand if needed. */ + if( hp->ht_flag & M_EXPANDED ) { + ename = fname = DmStrDup(hp->ht_value); + } else { + ename = fname = Expand(hp->ht_value); + } - if( hp->ht_flag & M_PRECIOUS ) fil = Openfile(fname, FALSE, FALSE); + if( hp->ht_flag & M_PRECIOUS ) fil = Openfile(fname, FALSE, FALSE); } if( fil == NIL(FILE) ) { - fname=Expand(Read_env_string(macname)); - if( (fil = Openfile(fname, FALSE, FALSE)) != NIL(FILE) ) FREE(ename); + fname=Expand(Read_env_string(macname)); + if( (fil = Openfile(fname, FALSE, FALSE)) != NIL(FILE) ) FREE(ename); } - if( fil == NIL(FILE) && hp != NIL(HASH) ) - fil = Openfile(fname=ename, FALSE, FALSE); + if( fil == NIL(FILE) && hp != NIL(HASH) ) { + if ( fname != NIL(char) ) { FREE(fname); fname = NIL(char); } + fil = Openfile(fname=ename, FALSE, FALSE); + } if( rname ) *rname = fname; diff --git a/dmake/expand.c b/dmake/expand.c index b7232303177e..50bbbdc46760 100644 --- a/dmake/expand.c +++ b/dmake/expand.c @@ -133,23 +133,23 @@ char *src; /* pointer to source string */ /* START <+...+> KLUDGE */ if( (ks=DmStrStr(start,"<+")) != NIL(char) - && (ke=DmStrStr(ks,"+>")) != NIL(char) ){ - char *t1, *t2; - - res = DmStrJoin( res, t2=Expand(t1=DmSubStr(start,ks)), -1, TRUE); - FREE(t1); FREE(t2); - - t1 = DmSubStr(ks+2, ke+1); t1[ke-ks-2] = ')'; - t2 = DmStrJoin( "$(mktmp ", t1, -1,FALSE); - FREE(t1); - res = DmStrJoin( res, t2=Expand(t2), -1, TRUE); - FREE(t2); - src = ke+2; + && (ke=DmStrStr(ks,"+>")) != NIL(char) ) { + char *t1, *t2; + + res = DmStrJoin( res, t2=Expand(t1=DmSubStr(start,ks)), -1, TRUE); + FREE(t1); FREE(t2); + + t1 = DmSubStr(ks+2, ke+1); t1[ke-ks-2] = ')'; + t2 = DmStrJoin( "$(mktmp ", t1, -1,FALSE); + FREE(t1); + res = DmStrJoin( res, t1=Expand(t2), -1, TRUE); + FREE(t1); FREE(t2); + src = ke+2; } /* END <+...+> KLUDGE */ else { - res = DmStrJoin( res, tmp = ScanToken(start,&src,TRUE), -1, TRUE ); - FREE( tmp ); + res = DmStrJoin( res, tmp = ScanToken(start,&src,TRUE), -1, TRUE ); + FREE( tmp ); } } @@ -726,36 +726,36 @@ int doexpand; /* If TRUE enables macro expansion */ break; case '\\': /* Transform \<nl> -> ' '. */ - if( s[1] != '\n' ) { - done = !lev; - break; - } else { - size_t len; - s[1] = ' '; - len = strlen(s+1)+1; - memmove( s, s+1, len ); - } - /*FALLTHRU*/ + if( s[1] != '\n' ) { + done = !lev; + break; + } else { + size_t len; + s[1] = ' '; + len = strlen(s+1)+1; + memmove( s, s+1, len ); + } + /*FALLTHRU*/ case ' ': case '\t': if ( lev == 1 ) fflag = 1; break; case '\0': /* check for null */ - *ps = s; - done = TRUE; - if( lev ) { /* catch $( or ${ without closing bracket */ - Fatal( "Syntax error in macro [$%s]. The closing bracket [%c] is missing.\n", start, edelim ); - } else - Fatal( "DEBUG: This cannot occur! [%s].\n", start ); - break; - - case ')': /* close macro brace */ - case '}': + *ps = s; + done = TRUE; + if( lev ) { /* catch $( or ${ without closing bracket */ + Fatal( "Syntax error in macro [$%s]. The closing bracket [%c] is missing.\n", start, edelim ); + } else + Fatal( "DEBUG: This cannot occur! [%s].\n", start ); + break; + + case ')': /* close macro brace */ + case '}': if( !lev ) /* A closing bracket without an .. */ - Fatal("Syntax error in macro [$%s]. Closing bracket [%c] cannot be a macro name.\n", start, *s ); + Fatal("Syntax error in macro [$%s]. Closing bracket [%c] cannot be a macro name.\n", start, *s ); else if( *s == edelim ) --lev; - /*FALLTHRU*/ + /*FALLTHRU*/ default: /* Done when lev == 0. This means either no */ done = !lev; /* opening bracket (single letter macro) or */ @@ -768,14 +768,14 @@ int doexpand; /* If TRUE enables macro expansion */ /* Check if this is a $A type macro. If so then we have to * handle it a little differently. */ if( bflag ) - macro_name = DmSubStr( start+1, s-1 ); + macro_name = DmSubStr( start+1, s-1 ); else - macro_name = DmSubStr( start, s ); + macro_name = DmSubStr( start, s ); /* If we don't have to expand the macro we're done. */ if (!doexpand) { - *ps = s; - DB_RETURN(macro_name); + *ps = s; + DB_RETURN(macro_name); } /* Check to see if the macro name contains spaces, if so then treat it @@ -783,251 +783,251 @@ int doexpand; /* If TRUE enables macro expansion */ * deal with it. We do not call the function expander if the function * invocation begins with a '$' */ if( fflag && *macro_name != '$' ) { - result = Exec_function(macro_name); + result = Exec_function(macro_name); } else { - /* Check if the macro is a recursive macro name, if so then - * EXPAND the name before expanding the value */ - if( strchr( macro_name, '$' ) != NIL(char) ) { - recurse_name = Expand( macro_name ); - FREE( macro_name ); - macro_name = recurse_name; - } + /* Check if the macro is a recursive macro name, if so then + * EXPAND the name before expanding the value */ + if( strchr( macro_name, '$' ) != NIL(char) ) { + recurse_name = Expand( macro_name ); + FREE( macro_name ); + macro_name = recurse_name; + } - /* Code to do value expansion goes here, NOTE: macros whose assign bit - is one have been evaluated and assigned, they contain no further - expansions and thus do not need their values expanded again. */ + /* Code to do value expansion goes here, NOTE: macros whose assign bit + is one have been evaluated and assigned, they contain no further + expansions and thus do not need their values expanded again. */ - if( (hp = GET_MACRO( macro_name )) != NIL(HASH) ) { - if( hp->ht_flag & M_MARK ) - Fatal( "Detected circular macro [%s]", hp->ht_name ); + if( (hp = GET_MACRO( macro_name )) != NIL(HASH) ) { + if( hp->ht_flag & M_MARK ) + Fatal( "Detected circular macro [%s]", hp->ht_name ); - if( !(hp->ht_flag & M_EXPANDED) ) { - hp->ht_flag |= M_MARK; - result = Expand( hp->ht_value ); - hp->ht_flag ^= M_MARK; - } - else if( hp->ht_value != NIL(char) ) - result = DmStrDup( hp->ht_value ); - else - result = DmStrDup( "" ); + if( !(hp->ht_flag & M_EXPANDED) ) { + hp->ht_flag |= M_MARK; + result = Expand( hp->ht_value ); + hp->ht_flag ^= M_MARK; + } + else if( hp->ht_value != NIL(char) ) + result = DmStrDup( hp->ht_value ); + else + result = DmStrDup( "" ); - } - else { - /* The use of an undefined macro implicitly defines it but - * leaves its value to NIL(char). */ - hp = Def_macro( macro_name, NIL(char), M_EXPANDED ); - /* Setting M_INIT assures that this macro is treated unset like - * default internal macros. (Necessary for *= and *:=) */ - hp->ht_flag |= M_INIT; - - result = DmStrDup( "" ); - } - /* Mark macros as used only if we are not expanding them for - * the purpose of a .IF test, so we can warn about redef after use*/ - if( !If_expand ) hp->ht_flag |= M_USED; + } + else { + /* The use of an undefined macro implicitly defines it but + * leaves its value to NIL(char). */ + hp = Def_macro( macro_name, NIL(char), M_EXPANDED ); + /* Setting M_INIT assures that this macro is treated unset like + * default internal macros. (Necessary for *= and *:=) */ + hp->ht_flag |= M_INIT; + + result = DmStrDup( "" ); + } + /* Mark macros as used only if we are not expanding them for + * the purpose of a .IF test, so we can warn about redef after use*/ + if( !If_expand ) hp->ht_flag |= M_USED; } if( mflag ) { - char separator; - int modifier_list = 0; - int aug_mod = FALSE; - char *pat1; - char *pat2; - char *p; - - /* We are inside of a macro expansion. The "build up macro name, - * find its while loop above should have caught all \<nl> and - * converted them to a real space. Let's verify this. */ - for( p=s; *p && *p != edelim && *p; p++ ) { - if( p[0] == '\\' && p[1] == '\n' ) { - size_t len; - p[1] = ' '; - len = strlen(p+1)+1; - memmove( p, p+1, len ); - } - } - if( !*p ) - Fatal( "Syntax error in macro modifier pattern [$%s]. The closing bracket [%c] is missing.\n", start, edelim ); - - /* Yet another brain damaged AUGMAKE kludge. We should accept the - * AUGMAKE bullshit of $(f:pat=sub) form of macro expansion. In - * order to do this we will forgo the normal processing if the - * AUGMAKE solution pans out, otherwise we will try to process the - * modifiers ala dmake. - * - * So we look for = in modifier string. - * If found we process it and not do the normal stuff */ - - for( p=s; *p && *p != '=' && *p != edelim; p++ ); - - if( *p == '=' ) { - char *tmp; - - pat1 = Expand(tmp = DmSubStr(s,p)); FREE(tmp); - s = p+1; - p = _scan_ballanced_parens(s+1, edelim); - - if ( !*p ) { - Fatal( "Incomplete macro expression [%s]", s ); - p = s+1; + char separator; + int modifier_list = 0; + int aug_mod = FALSE; + char *pat1; + char *pat2; + char *p; + + /* We are inside of a macro expansion. The "build up macro name, + * find its while loop above should have caught all \<nl> and + * converted them to a real space. Let's verify this. */ + for( p=s; *p && *p != edelim && *p; p++ ) { + if( p[0] == '\\' && p[1] == '\n' ) { + size_t len; + p[1] = ' '; + len = strlen(p+1)+1; + memmove( p, p+1, len ); + } + } + if( !*p ) + Fatal( "Syntax error in macro modifier pattern [$%s]. The closing bracket [%c] is missing.\n", start, edelim ); + + /* Yet another brain damaged AUGMAKE kludge. We should accept the + * AUGMAKE bullshit of $(f:pat=sub) form of macro expansion. In + * order to do this we will forgo the normal processing if the + * AUGMAKE solution pans out, otherwise we will try to process the + * modifiers ala dmake. + * + * So we look for = in modifier string. + * If found we process it and not do the normal stuff */ + + for( p=s; *p && *p != '=' && *p != edelim; p++ ); + + if( *p == '=' ) { + char *tmp; + + pat1 = Expand(tmp = DmSubStr(s,p)); FREE(tmp); + s = p+1; + p = _scan_ballanced_parens(s+1, edelim); + + if ( !*p ) { + Fatal( "Incomplete macro expression [%s]", s ); + p = s+1; + } + pat2 = Expand(tmp = DmSubStr(s,p)); FREE(tmp); + + result = Apply_edit( result, pat1, pat2, TRUE, TRUE ); + FREE( pat1 ); + FREE( pat2 ); + s = p; + aug_mod = TRUE; } - pat2 = Expand(tmp = DmSubStr(s,p)); FREE(tmp); - - result = Apply_edit( result, pat1, pat2, TRUE, TRUE ); - FREE( pat1 ); - FREE( pat2 ); - s = p; - aug_mod = TRUE; - } - if( !aug_mod ) - while( *s && *s != edelim ) { /* while not at end of macro */ - char switch_char; + if( !aug_mod ) + while( *s && *s != edelim ) { /* while not at end of macro */ + char switch_char; - switch( switch_char = *s++ ) { - case '1': modifier_list |= JUST_FIRST_FLAG; break; + switch( switch_char = *s++ ) { + case '1': modifier_list |= JUST_FIRST_FLAG; break; - case 'b': - case 'B': modifier_list |= FILE_FLAG; break; + case 'b': + case 'B': modifier_list |= FILE_FLAG; break; - case 'd': - case 'D': modifier_list |= DIRECTORY_FLAG; break; + case 'd': + case 'D': modifier_list |= DIRECTORY_FLAG; break; - case 'f': - case 'F': modifier_list |= FILE_FLAG | SUFFIX_FLAG; break; + case 'f': + case 'F': modifier_list |= FILE_FLAG | SUFFIX_FLAG; break; - case 'e': - case 'E': modifier_list |= SUFFIX_FLAG; break; + case 'e': + case 'E': modifier_list |= SUFFIX_FLAG; break; - case 'l': - case 'L': modifier_list |= TOLOWER_FLAG; break; + case 'l': + case 'L': modifier_list |= TOLOWER_FLAG; break; - case 'i': - case 'I': modifier_list |= INFNAME_FLAG; break; + case 'i': + case 'I': modifier_list |= INFNAME_FLAG; break; - case 'u': - case 'U': modifier_list |= TOUPPER_FLAG; break; + case 'u': + case 'U': modifier_list |= TOUPPER_FLAG; break; - case 'm': - case 'M': - if( modifier_list || ( (*s != edelim) && (*s != ':') ) ) { + case 'm': + case 'M': + if( modifier_list || ( (*s != edelim) && (*s != ':') ) ) { Warning( "Map escape modifier must appear alone, ignored"); modifier_list = 0; - } - else { + } + else { /* map the escape codes in the separator string first */ for(p=result; (p = strchr(p,ESCAPE_CHAR)) != NIL(char); p++) - Map_esc( p ); - } - /* find the end of the macro spec, or the start of a new - * modifier list for further processing of the result */ + Map_esc( p ); + } + /* find the end of the macro spec, or the start of a new + * modifier list for further processing of the result */ - for( ; (*s != edelim) && (*s != ':') && *s; s++ ); - if( !*s ) - Fatal( "Syntax error in macro. [$%s].\n", start ); - if( *s == ':' ) s++; - break; + for( ; (*s != edelim) && (*s != ':') && *s; s++ ); + if( !*s ) + Fatal( "Syntax error in macro. [$%s].\n", start ); + if( *s == ':' ) s++; + break; - case 'n': - case 'N': modifier_list |= NORMPATH_FLAG; break; + case 'n': + case 'N': modifier_list |= NORMPATH_FLAG; break; - case 'S': - case 's': - if( modifier_list ) { + case 'S': + case 's': + if( modifier_list ) { Warning( "Edit modifier must appear alone, ignored"); modifier_list = 0; - } - else { + } + else { separator = *s++; for( p=s; *p != separator && *p; p++ ); if( !*p ) - Fatal( "Syntax error in subst macro. [$%s].\n", start ); + Fatal( "Syntax error in subst macro. [$%s].\n", start ); else { - char *t1, *t2; - pat1 = DmSubStr( s, p ); - for(s=p=p+1; (*p != separator) && *p; p++ ); - /* Before the parsing fixes in iz36027 the :s macro modifier - * erroneously worked with patterns with missing pattern - * separator, i.e. $(XXX:s#pat#sub). This is an error because - * it prohibits the use of following macro modifiers. - * I.e. $(XXX:s#pat#sub:u) falsely replaces with "sub:u". - * ??? Remove this special case once OOo compiles without - * any of this warnings. */ - if( !*p ) { - if( *(p-1) == edelim ) { - p--; - Warning( "Syntax error in subst macro. Bracket found, but third delimiter [%c] missing in [$%s].\n", separator, start ); - } - else { - Fatal( "Syntax error in subst macro. Third delimiter [%c] missing in [$%s].\n", separator, start ); + char *t1, *t2; + pat1 = DmSubStr( s, p ); + for(s=p=p+1; (*p != separator) && *p; p++ ); + /* Before the parsing fixes in iz36027 the :s macro modifier + * erroneously worked with patterns with missing pattern + * separator, i.e. $(XXX:s#pat#sub). This is an error because + * it prohibits the use of following macro modifiers. + * I.e. $(XXX:s#pat#sub:u) falsely replaces with "sub:u". + * ??? Remove this special case once OOo compiles without + * any of this warnings. */ + if( !*p ) { + if( *(p-1) == edelim ) { + p--; + Warning( "Syntax error in subst macro. Bracket found, but third delimiter [%c] missing in [$%s].\n", separator, start ); + } + else { + Fatal( "Syntax error in subst macro. Third delimiter [%c] missing in [$%s].\n", separator, start ); + } } - } - pat2 = DmSubStr( s, p ); - t1 = Expand(pat1); FREE(pat1); - t2 = Expand(pat2); FREE(pat2); - result = Apply_edit( result, t1, t2, TRUE, FALSE ); - FREE( t1 ); - FREE( t2 ); + pat2 = DmSubStr( s, p ); + t1 = Expand(pat1); FREE(pat1); + t2 = Expand(pat2); FREE(pat2); + result = Apply_edit( result, t1, t2, TRUE, FALSE ); + FREE( t1 ); + FREE( t2 ); } s = p; - } - /* find the end of the macro spec, or the start of a new - * modifier list for further processing of the result */ - - for( ; (*s != edelim) && (*s != ':') && *s; s++ ); - if( !*s ) - Fatal( "Syntax error in macro. [$%s].\n", start ); - if( *s == ':' ) s++; - break; - - case 'T': - case 't': - case '^': - case '+': - if( modifier_list ) { + } + /* find the end of the macro spec, or the start of a new + * modifier list for further processing of the result */ + + for( ; (*s != edelim) && (*s != ':') && *s; s++ ); + if( !*s ) + Fatal( "Syntax error in macro. [$%s].\n", start ); + if( *s == ':' ) s++; + break; + + case 'T': + case 't': + case '^': + case '+': + if( modifier_list ) { Warning( "Tokenize modifier must appear alone, ignored"); modifier_list = 0; - } - else { + } + else { separator = *s++; if( separator == '$' ) { - p = _scan_ballanced_parens(s,'\0'); - - if ( *p ) { - char *tmp; - pat1 = Expand(tmp = DmSubStr(s-1,p)); - FREE(tmp); - result = Tokenize(result, pat1, switch_char, TRUE); - FREE(pat1); - } - else { - Warning( "Incomplete macro expression [%s]", s ); - } - s = p; + p = _scan_ballanced_parens(s,'\0'); + + if ( *p ) { + char *tmp; + pat1 = Expand(tmp = DmSubStr(s-1,p)); + FREE(tmp); + result = Tokenize(result, pat1, switch_char, TRUE); + FREE(pat1); + } + else { + Warning( "Incomplete macro expression [%s]", s ); + } + s = p; } else if ( separator == '\"' ) { - /* we change the semantics to allow $(v:t")") */ - for (p = s; *p && *p != separator; p++) - if (*p == '\\') - if (p[1] == '\\' || p[1] == '"') - p++; - - if( *p == 0 ) - Fatal( "Unterminated separator string" ); - else { - pat1 = DmSubStr( s, p ); - result = Tokenize( result, pat1, switch_char, TRUE); - FREE( pat1 ); - } - s = p; + /* we change the semantics to allow $(v:t")") */ + for (p = s; *p && *p != separator; p++) + if (*p == '\\') + if (p[1] == '\\' || p[1] == '"') + p++; + + if( *p == 0 ) + Fatal( "Unterminated separator string" ); + else { + pat1 = DmSubStr( s, p ); + result = Tokenize( result, pat1, switch_char, TRUE); + FREE( pat1 ); + } + s = p; } else { Warning( - "Separator must be a quoted string or macro expression"); + "Separator must be a quoted string or macro expression"); } /* find the end of the macro spec, or the start of a new @@ -1035,26 +1035,26 @@ int doexpand; /* If TRUE enables macro expansion */ for( ; (*s != edelim) && (*s != ':'); s++ ); if( *s == ':' ) s++; - } - break; + } + break; - case ':': - if( modifier_list ) { + case ':': + if( modifier_list ) { result = Apply_modifiers( modifier_list, result ); modifier_list = 0; - } - break; + } + break; - default: - Warning( "Illegal modifier in macro, ignored" ); - break; - } - } + default: + Warning( "Illegal modifier in macro, ignored" ); + break; + } + } - if( modifier_list ) /* apply modifier */ - result = Apply_modifiers( modifier_list, result ); + if( modifier_list ) /* apply modifier */ + result = Apply_modifiers( modifier_list, result ); - s++; + s++; } *ps = s; @@ -1077,68 +1077,68 @@ char *s; char **ps; int *flag; { - char *t; - char *start; - char *res; - int lev = 1; - int done = 0; - - DB_ENTER( "_scan_brace" ); - - start = s; - while( !done ) - switch( *s++ ) { - case '{': - if( *s == '{' ) break; /* ignore {{ */ - lev++; - break; - - case '}': - if( *s == '}' ) break; /* ignore }} */ - if( lev ) - if( --lev == 0 ) done = TRUE; - break; - - case '$': - if( *s == '{' || *s == '}' ) { - if( (t = strchr(s,'}')) != NIL(char) ) - s = t; - s++; - } - break; + char *t; + char *start; + char *res; + int lev = 1; + int done = 0; + + DB_ENTER( "_scan_brace" ); + + start = s; + while( !done ) + switch( *s++ ) { + case '{': + if( *s == '{' ) break; /* ignore {{ */ + lev++; + break; + + case '}': + if( *s == '}' ) break; /* ignore }} */ + if( lev ) + if( --lev == 0 ) done = TRUE; + break; + + case '$': + if( *s == '{' || *s == '}' ) { + if( (t = strchr(s,'}')) != NIL(char) ) + s = t; + s++; + } + break; - case '\0': - if( lev ) { - done = TRUE; - s--; - /* error malformed macro expansion */ - } - break; + case '\0': + if( lev ) { + done = TRUE; + s--; + /* error malformed macro expansion */ } + break; + } - start = DmSubStr( start, (lev) ? s : s-1 ); + start = DmSubStr( start, (lev) ? s : s-1 ); - if( lev ) { - /* Braces were not ballanced so just return the string. - * Do not expand it. */ + if( lev ) { + /* Braces were not ballanced so just return the string. + * Do not expand it. */ - res = DmStrJoin( "{", start, -1, FALSE ); - *flag = 0; - } - else { - *flag = 1; - res = Expand( start ); + res = DmStrJoin( "{", start, -1, FALSE ); + *flag = 0; + } + else { + *flag = 1; + res = Expand( start ); - if( (t = DmStrSpn( res, " \t" )) != res ) { - size_t len = strlen(t)+1; - memmove( res, t, len ); - } - } + if( (t = DmStrSpn( res, " \t" )) != res ) { + size_t len = strlen(t)+1; + memmove( res, t, len ); + } + } - FREE( start ); /* this is ok! start is assigned a DmSubStr above */ - *ps = s; + FREE( start ); /* this is ok! start is assigned a DmSubStr above */ + *ps = s; - DB_RETURN( res ); + DB_RETURN( res ); } @@ -1155,31 +1155,31 @@ _cross_prod( x, y )/* char *x; char *y; { - static char *buf = NULL; - static int buf_siz = 0; - char *brkx; - char *brky; - char *cy; - char *cx; - char *res; - int i; - - if( *x && *y ) { - res = DmStrDup( "" ); cx = x; - while( *cx ) { - cy = y; - brkx = DmStrPbrk( cx, " \t\n" ); - if( (brkx-cx == 2) && *cx == '\"' && *(cx+1) == '\"' ) cx = brkx; - - while( *cy ) { + static char *buf = NULL; + static int buf_siz = 0; + char *brkx; + char *brky; + char *cy; + char *cx; + char *res; + int i; + + if( *x && *y ) { + res = DmStrDup( "" ); cx = x; + while( *cx ) { + cy = y; + brkx = DmStrPbrk( cx, " \t\n" ); + if( (brkx-cx == 2) && *cx == '\"' && *(cx+1) == '\"' ) cx = brkx; + + while( *cy ) { brky = DmStrPbrk( cy, " \t\n" ); if( (brky-cy == 2) && *cy == '\"' && *(cy+1) == '\"' ) cy = brky; i = brkx-cx + brky-cy + 2; if( i > buf_siz ) { /* grow buf to the correct size */ - if( buf != NIL(char) ) FREE( buf ); - if( (buf = MALLOC( i, char )) == NIL(char)) No_ram(); - buf_siz = i; + if( buf != NIL(char) ) FREE( buf ); + if( (buf = MALLOC( i, char )) == NIL(char)) No_ram(); + buf_siz = i; } strncpy( buf, cx, (i = brkx-cx) ); @@ -1189,16 +1189,16 @@ char *y; strcat( buf, " " ); res = DmStrJoin( res, buf, -1, TRUE ); cy = DmStrSpn( brky, " \t\n" ); - } - cx = DmStrSpn( brkx, " \t\n" ); } + cx = DmStrSpn( brkx, " \t\n" ); + } - FREE( x ); - res[ strlen(res)-1 ] = '\0'; - } - else - res = DmStrJoin( x, y, -1, TRUE ); + FREE( x ); + res[ strlen(res)-1 ] = '\0'; + } + else + res = DmStrJoin( x, y, -1, TRUE ); - FREE( y ); - return( res ); + FREE( y ); + return( res ); } diff --git a/dmake/function.c b/dmake/function.c index c0942db09213..cd86810849e5 100644 --- a/dmake/function.c +++ b/dmake/function.c @@ -465,45 +465,45 @@ static char * _exec_uniq( args ) char *args; { - char *res = NIL(char); - char *data = Expand(args); - char **tokens; - char **tokens_after; - char *p; - char *white = " \t\n"; - int j; - int i; - char *last = ""; - int k = 0; - - for(i=0,p=DmStrSpn(data,white);*p;p=DmStrSpn(DmStrPbrk(p,white),white),i++); - - if( i != 0 ) { - TALLOC(tokens, i, char *); - TALLOC(tokens_after, i, char *); - - for( i=0,p=DmStrSpn(data,white); *p; p=DmStrSpn(p,white),i++){ - tokens[i] = p; - p = DmStrPbrk(p,white); - if( *p ) *p++ = '\0'; - } - - qsort( tokens, i, sizeof(char *), _mystrcmp ); - - for( j=0; j<i; j++ ) { - if (strcmp(tokens[j], last) != 0) { + char *res = NIL(char); + char *data = Expand(args); + char **tokens; + char **tokens_after; + char *p; + char *white = " \t\n"; + int j; + int i; + char *last = ""; + int k = 0; + + for(i=0,p=DmStrSpn(data,white);*p;p=DmStrSpn(DmStrPbrk(p,white),white),i++); + + if( i != 0 ) { + TALLOC(tokens, i, char *); + TALLOC(tokens_after, i, char *); + + for( i=0,p=DmStrSpn(data,white); *p; p=DmStrSpn(p,white),i++){ + tokens[i] = p; + p = DmStrPbrk(p,white); + if( *p ) *p++ = '\0'; + } + + qsort( tokens, i, sizeof(char *), _mystrcmp ); + + for( j=0; j<i; j++ ) { + if (strcmp(tokens[j], last) != 0) { tokens_after[k++] = tokens[j]; last = tokens[j]; - } } + } - for( j=0; j<k; j++ ) res = DmStrApp(res, tokens_after[j]); - FREE(data); - FREE(tokens); - FREE(tokens_after); - } + for( j=0; j<k; j++ ) res = DmStrApp(res, tokens_after[j]); + FREE(tokens); + FREE(tokens_after); + } - return(res); + FREE(data); + return(res); } static int diff --git a/dmake/infer.c b/dmake/infer.c index e424b34fb201..02682bc16f19 100644 --- a/dmake/infer.c +++ b/dmake/infer.c @@ -66,157 +66,162 @@ Infer_recipe( cp, setdirroot )/* CELLPTR cp; CELLPTR setdirroot; { - ICELLPTR nomatch, match; - - DB_ENTER("Infer_recipe"); - - if( cp->ce_attr & A_NOINFER ) {DB_VOID_RETURN;} - - DB_PRINT("inf", ("Inferring rule for [%s]", cp->CE_NAME)); - - match = NIL(ICELL); - nomatch = add_iset( NIL(ICELL), NIL(ICELL), NIL(CELL), NIL(DFALINK), - setdirroot, Prep+count_dots(cp->CE_NAME), 0, - DmStrDup(cp->CE_NAME), NIL(char), - cp->ce_time != (time_t)0L); - - /* Make sure we try whole heartedly to infer at least one suffix */ - if( nomatch->ic_dmax == 0 ) ++nomatch->ic_dmax; - - DB_EXECUTE( "inf", _dump_iset("nomatch",nomatch); ); - - /* If nomatch is non-empty there was no match with an existing - * prerrequisite, try to derive one. */ - while( nomatch != NIL(ICELL) ) { - ICELLPTR new_nomatch = NIL(ICELL); - ICELLPTR ic, pmatch, mmatch; - CELLPTR prereq; - - for( ic=nomatch; ic != NIL(ICELL); ic=ic->ic_next ) { - int ipush = FALSE; - - if( ic->ic_dir ) ipush = Push_dir(ic->ic_dir, ic->ic_name, FALSE); - match = union_iset(match, derive_prerequisites(ic, &new_nomatch)); - if( ipush ) Pop_dir(FALSE); - } - - DB_EXECUTE( "inf", _dump_iset("match",match); ); - DB_EXECUTE( "inf", _dump_iset("nomatch",new_nomatch); ); - - /* We have now deduced the two sets MATCH and NOMATCH. MATCH holds the - * set of edges that we encountered that matched. If this set is empty - * then we can apply transitive closure (if enabled) to the elements of - * NOMATCH to see if we can find some other method to make the target. - * - * If MATCH is non-empty, we have found a method for making the target. - * It is the shortest method for doing so (ie. uses fewest number of - * steps). If MATCH contains more than one element then we have a - * possible ambiguity. - */ - if( match == NIL(ICELL) ) { - nomatch = new_nomatch; - - /* Skip the rest and try one level deeper. */ - if( Transitive ) continue; - - goto all_done; - } - - /* Ok, we have a set of possible matches in MATCH, we should check the - * set for ambiguity. If more than one inference path exists of the - * same depth, then we may issue an ambiguous inference error message. - * - * The message is suppressed if MATCH contains two elements and one of - * them is the empty-prerequisite-rule. In this case we ignore the - * ambiguity and take the rule that infers the prerequisite. - * - * Also if there are any chains that rely on a non-existant prerequisite - * that may get made because it has a recipe then we prefer any that - * rely on existing final prerequisites over those that we have to make. - */ - - /* Split out those that have to be made from those that end in - * prerequisites that already exist. */ - pmatch = mmatch = NIL(ICELL); - for(; match; match = ic ) { - /* This loop checks all possible matches. */ - DB_PRINT("inf", ("Target [%s] : prerequisite [%s]", - match->ic_meta->CE_NAME, match->ic_name)); - - ic = match->ic_next; - match->ic_next = NIL(ICELL); - - if( match->ic_exists ) + ICELLPTR nomatch, match; + + DB_ENTER("Infer_recipe"); + + if( cp->ce_attr & A_NOINFER ) {DB_VOID_RETURN;} + + DB_PRINT("inf", ("Inferring rule for [%s]", cp->CE_NAME)); + + match = NIL(ICELL); + { + char *tmp; + nomatch = add_iset( NIL(ICELL), NIL(ICELL), NIL(CELL), NIL(DFALINK), + setdirroot, Prep+count_dots(cp->CE_NAME), 0, + tmp = DmStrDup(cp->CE_NAME), NIL(char), + cp->ce_time != (time_t)0L); + FREE(tmp); + } + + /* Make sure we try whole heartedly to infer at least one suffix */ + if( nomatch->ic_dmax == 0 ) ++nomatch->ic_dmax; + + DB_EXECUTE( "inf", _dump_iset("nomatch",nomatch); ); + + /* If nomatch is non-empty there was no match with an existing + * prerrequisite, try to derive one. */ + while( nomatch != NIL(ICELL) ) { + ICELLPTR new_nomatch = NIL(ICELL); + ICELLPTR ic, pmatch, mmatch; + CELLPTR prereq; + + for( ic=nomatch; ic != NIL(ICELL); ic=ic->ic_next ) { + int ipush = FALSE; + + if( ic->ic_dir ) ipush = Push_dir(ic->ic_dir, ic->ic_name, FALSE); + match = union_iset(match, derive_prerequisites(ic, &new_nomatch)); + if( ipush ) Pop_dir(FALSE); + } + + DB_EXECUTE( "inf", _dump_iset("match",match); ); + DB_EXECUTE( "inf", _dump_iset("nomatch",new_nomatch); ); + + /* We have now deduced the two sets MATCH and NOMATCH. MATCH holds the + * set of edges that we encountered that matched. If this set is empty + * then we can apply transitive closure (if enabled) to the elements of + * NOMATCH to see if we can find some other method to make the target. + * + * If MATCH is non-empty, we have found a method for making the target. + * It is the shortest method for doing so (ie. uses fewest number of + * steps). If MATCH contains more than one element then we have a + * possible ambiguity. + */ + if( match == NIL(ICELL) ) { + nomatch = new_nomatch; + + /* Skip the rest and try one level deeper. */ + if( Transitive ) continue; + + goto all_done; + } + + /* Ok, we have a set of possible matches in MATCH, we should check the + * set for ambiguity. If more than one inference path exists of the + * same depth, then we may issue an ambiguous inference error message. + * + * The message is suppressed if MATCH contains two elements and one of + * them is the empty-prerequisite-rule. In this case we ignore the + * ambiguity and take the rule that infers the prerequisite. + * + * Also if there are any chains that rely on a non-existant prerequisite + * that may get made because it has a recipe then we prefer any that + * rely on existing final prerequisites over those that we have to make. + */ + + /* Split out those that have to be made from those that end in + * prerequisites that already exist. */ + pmatch = mmatch = NIL(ICELL); + for(; match; match = ic ) { + /* This loop checks all possible matches. */ + DB_PRINT("inf", ("Target [%s] : prerequisite [%s]", + match->ic_meta->CE_NAME, match->ic_name)); + + ic = match->ic_next; + match->ic_next = NIL(ICELL); + + if( match->ic_exists ) pmatch = union_iset(pmatch, match); - else + else mmatch = union_iset(mmatch, match); - } + } - /* Prefer %-targets with existing prerequisites. */ - if( pmatch ) - match = pmatch; - else - match = mmatch; + /* Prefer %-targets with existing prerequisites. */ + if( pmatch ) + match = pmatch; + else + match = mmatch; - /* Make sure it is unique. It would be easy to check - * match->ic_meta->ce_prq for existence and prefer no prerequisites - * over prerequisites that are present, but we are currently not - * doing it. */ - if( match->ic_next != NIL(ICELL) ) { - int count = 1; + /* Make sure it is unique. It would be easy to check + * match->ic_meta->ce_prq for existence and prefer no prerequisites + * over prerequisites that are present, but we are currently not + * doing it. */ + if( match->ic_next != NIL(ICELL) ) { + int count = 1; - Warning( "Ambiguous inference chains for target '%s'", cp->CE_NAME ); - for( ic=match; ic; ic=ic->ic_next ) + Warning( "Ambiguous inference chains for target '%s'", cp->CE_NAME ); + for( ic=match; ic; ic=ic->ic_next ) (void) dump_inf_chain(ic, TRUE, count++); - Warning( "First matching rule is chosen."); - } - - /* MATCH now points at the derived prerequisite chain(s). We must now - * take cp, and construct the correct graph so that the make may - * proceed. */ - - /* The folowing shows only the first element, i.e. the last matching - * recipe that was found. */ - if( Verbose & V_INFER ) { - char *tmp = dump_inf_chain(match, TRUE, FALSE); - printf("%s: Inferring prerequistes and recipes using:\n%s: ... %s\n", - Pname, Pname, tmp ); - FREE(tmp); } + Warning( "First matching rule is chosen."); + } + + /* MATCH now points at the derived prerequisite chain(s). We must now + * take cp, and construct the correct graph so that the make may + * proceed. */ + + /* The folowing shows only the first element, i.e. the last matching + * recipe that was found. */ + if( Verbose & V_INFER ) { + char *tmp = dump_inf_chain(match, TRUE, FALSE); + printf("%s: Inferring prerequistes and recipes using:\n%s: ... %s\n", + Pname, Pname, tmp ); + FREE(tmp); + } - pmatch = NIL(ICELL); - prereq = NIL(CELL); + pmatch = NIL(ICELL); + prereq = NIL(CELL); - /* This loop treats the inferred targets last to first. */ - while( match ) { - CELLPTR infcell=NIL(CELL); + /* This loop treats the inferred targets last to first. */ + while( match ) { + CELLPTR infcell=NIL(CELL); - /* Compute the inferred prerequisite first. */ - if( match->ic_name ) { + /* Compute the inferred prerequisite first. */ + if( match->ic_name ) { if( match->ic_meta ) - infcell = Def_cell( match->ic_name ); + infcell = Def_cell( match->ic_name ); else - infcell = cp; + infcell = cp; infcell->ce_flag |= F_TARGET; if( infcell != cp ) { - infcell->ce_flag |= F_INFER|F_REMOVE; - DB_PRINT("remove", ("Mark for deletion [%s]", - infcell->CE_NAME)); + infcell->ce_flag |= F_INFER|F_REMOVE; + DB_PRINT("remove", ("Mark for deletion [%s]", + infcell->CE_NAME)); } if( !match->ic_flag ) - infcell->ce_attr |= A_NOINFER; - } + infcell->ce_attr |= A_NOINFER; + } - /* Add global prerequisites from previous rule if there are any and - * the recipe. */ - if( pmatch ) { + /* Add global prerequisites from previous rule if there are any and + * the recipe. */ + if( pmatch ) { CELLPTR imeta = pmatch->ic_meta; LINKPTR lp; DB_PRINT("inf", ("%%-target [%s] - infered target [%s]\n", - imeta->CE_NAME, infcell->CE_NAME)); + imeta->CE_NAME, infcell->CE_NAME)); infcell->ce_per = pmatch->ic_dfa->dl_per; infcell->ce_attr |= (imeta->ce_attr & A_TRANSFER); @@ -226,31 +231,31 @@ CELLPTR setdirroot; * the this target it might have been created and stated * therefore these values need to be reset. */ if( infcell->ce_attr & A_PHONY ){ - infcell->ce_time = 0L; - infcell->ce_flag &= ~F_STAT; + infcell->ce_time = 0L; + infcell->ce_flag &= ~F_STAT; } if( !(infcell->ce_flag & F_RULES) ) { - infcell->ce_flag |= (imeta->ce_flag&(F_SINGLE|F_GROUP))|F_RULES; - infcell->ce_recipe = imeta->ce_recipe; + infcell->ce_flag |= (imeta->ce_flag&(F_SINGLE|F_GROUP))|F_RULES; + infcell->ce_recipe = imeta->ce_recipe; } /* Add any conditional macro definitions that may be associated * with the inferred cell. */ if (imeta->ce_cond != NIL(STRING)) { - STRINGPTR sp,last; - - last = infcell->ce_cond; - for(sp=imeta->ce_cond; sp; sp=sp->st_next) { - STRINGPTR new; - TALLOC(new, 1, STRING); - new->st_string = DmStrDup(sp->st_string); - if(last) - last->st_next = new; - else - infcell->ce_cond = new; - last = new; - } + STRINGPTR sp,last; + + last = infcell->ce_cond; + for(sp=imeta->ce_cond; sp; sp=sp->st_next) { + STRINGPTR new; + TALLOC(new, 1, STRING); + new->st_string = DmStrDup(sp->st_string); + if(last) + last->st_next = new; + else + infcell->ce_cond = new; + last = new; + } } pmatch->ic_dfa->dl_per = NIL(char); @@ -258,63 +263,63 @@ CELLPTR setdirroot; /* If infcell already had a .SETDIR directory set then modify it * based on whether it was the original cell or some intermediary. */ if( imeta->ce_dir ) { - if( infcell->ce_dir && infcell == cp ) { - /* cp->ce_dir was set and we have pushed the directory prior - * to calling this routine. - * We build a new path by appending imeta->ce_dir to the - * current directory of the original cell. - * We should therefore pop it and push the new concatenated - * directory required by the inference. - * This leaks memory as cp->ce_dir is not freed before - * setting the new the new infcell->ce_dir value but as - * the pointer could be a `A_POOL` member we accept this. */ - infcell->ce_dir = DmStrDup(Build_path(infcell->ce_dir, - imeta->ce_dir)); - } - else { - /* Inherit a copy of the .SETDIR value. Use a copy because - * the original could have been freed in the meantime - * in Make() by the FREE() before _pool_lookup(). This can - * also leak if infcell->ce_dir was set before. */ - infcell->ce_dir = DmStrDup(imeta->ce_dir); - } + if( infcell->ce_dir && infcell == cp ) { + /* cp->ce_dir was set and we have pushed the directory prior + * to calling this routine. + * We build a new path by appending imeta->ce_dir to the + * current directory of the original cell. + * We should therefore pop it and push the new concatenated + * directory required by the inference. + * This leaks memory as cp->ce_dir is not freed before + * setting the new the new infcell->ce_dir value but as + * the pointer could be a `A_POOL` member we accept this. */ + infcell->ce_dir = DmStrDup(Build_path(infcell->ce_dir, + imeta->ce_dir)); + } + else { + /* Inherit a copy of the .SETDIR value. Use a copy because + * the original could have been freed in the meantime + * in Make() by the FREE() before _pool_lookup(). This can + * also leak if infcell->ce_dir was set before. */ + infcell->ce_dir = DmStrDup(imeta->ce_dir); + } } for( lp=imeta->ce_indprq; lp != NIL(LINK); lp=lp->cl_next ) { - char *name = lp->cl_prq->CE_NAME; - CELLPTR tcp; - - name = buildname( cp->CE_NAME, name, infcell->ce_per ); - tcp = Def_cell( name ); - tcp->ce_flag |= F_REMOVE; - Add_prerequisite( infcell, tcp, FALSE, FALSE ); - - if( Verbose & V_INFER ) - printf( "%s: Inferred indirect prerequisite [%s]\n", - Pname, name ); - FREE(name); + char *name = lp->cl_prq->CE_NAME; + CELLPTR tcp; + + name = buildname( cp->CE_NAME, name, infcell->ce_per ); + tcp = Def_cell( name ); + tcp->ce_flag |= F_REMOVE; + Add_prerequisite( infcell, tcp, FALSE, FALSE ); + + if( Verbose & V_INFER ) + printf( "%s: Inferred indirect prerequisite [%s]\n", + Pname, name ); + FREE(name); } - } + } - /* Add the previous cell as the prerequisite */ - if( prereq ) + /* Add the previous cell as the prerequisite */ + if( prereq ) (Add_prerequisite(infcell,prereq,FALSE,FALSE))->cl_flag |=F_TARGET; - pmatch = match; /* Previous member in inference chain ... */ - prereq = infcell; /* is a prerequisite to the next match. */ - /* ip->ic_parent is the next target in the inference chain to be - * build. If it is empty we are done. */ - match = match->ic_parent; - } + pmatch = match; /* Previous member in inference chain ... */ + prereq = infcell; /* is a prerequisite to the next match. */ + /* ip->ic_parent is the next target in the inference chain to be + * build. If it is empty we are done. */ + match = match->ic_parent; + } - DB_PRINT("inf", ("Terminated due to a match")); - break; - } + DB_PRINT("inf", ("Terminated due to a match")); + break; + } -all_done: - free_icells(); + all_done: + free_icells(); - DB_VOID_RETURN; + DB_VOID_RETURN; } diff --git a/dmake/parse.c b/dmake/parse.c index 2344192b8541..550f14223a91 100644 --- a/dmake/parse.c +++ b/dmake/parse.c @@ -35,142 +35,142 @@ Parse( fil )/* ============== Parse the makefile input */ FILE *fil; { - int rule = FALSE; /* have seen a recipe line */ - char *p; /* termporary pointer into Buffer */ - char *pTmpBuf; + int rule = FALSE; /* have seen a recipe line */ + char *p; /* termporary pointer into Buffer */ + char *pTmpBuf; - DB_ENTER( "Parse" ); + DB_ENTER( "Parse" ); - State = NORMAL_SCAN; - Group = FALSE; /* true if scanning a group rcpe */ - while( TRUE ) { - if( Get_line( Buffer, fil ) ) { - if( Group ) Fatal( "Incomplete rule recipe group detected" ); + State = NORMAL_SCAN; + Group = FALSE; /* true if scanning a group rcpe */ + while( TRUE ) { + if( Get_line( Buffer, fil ) ) { + if( Group ) Fatal( "Incomplete rule recipe group detected" ); - /* If we are still in RULE_SCAN mode there might be unbound recipes. */ - if( State == RULE_SCAN ) + /* If we are still in RULE_SCAN mode there might be unbound recipes. */ + if( State == RULE_SCAN ) Bind_rules_to_targets( F_DEFAULT ); - if( fil != NIL( FILE ) ) /* end of parsable input */ + if( fil != NIL( FILE ) ) /* end of parsable input */ Closefile(); - DB_VOID_RETURN; - } - else { + DB_VOID_RETURN; + } + else { #ifdef _MPW - if ( Buffer[0] == 10 ) - pTmpBuf = Buffer+1; - else + if ( Buffer[0] == 10 ) + pTmpBuf = Buffer+1; + else #endif - pTmpBuf = Buffer; + pTmpBuf = Buffer; #ifdef _MPW - p = pTmpBuf; - while ( *p ) - { - if ( *p == 10 ) - *p = '\t'; - p++; - } + p = pTmpBuf; + while ( *p ) + { + if ( *p == 10 ) + *p = '\t'; + p++; + } #endif - switch( State ) { - case RULE_SCAN: + switch( State ) { + case RULE_SCAN: - /* Check for the `[' that starts off a group recipe definition. - * It must appear as the first non-white space - * character in the line. */ + /* Check for the `[' that starts off a group recipe definition. + * It must appear as the first non-white space + * character in the line. */ - p = DmStrSpn( Buffer, " \t\r\n" ); - if( Set_group_attributes( p ) ) { + p = DmStrSpn( Buffer, " \t\r\n" ); + if( Set_group_attributes( p ) ) { if( Group ) - Fatal( "New group recipe begin found within group recipe." ); + Fatal( "New group recipe begin found within group recipe." ); else if( rule ) - Fatal( "Cannot mix single and group recipe lines." ); + Fatal( "Cannot mix single and group recipe lines." ); + else + Group = TRUE; + + rule = TRUE; + + break; /* ignore the group start */ + } + + if( Group ) { + if( *p != ']' ) { + Add_recipe_to_list( pTmpBuf, TRUE, TRUE ); + rule = TRUE; + } else - Group = TRUE; - - rule = TRUE; - - break; /* ignore the group start */ - } - - if( Group ) { - if( *p != ']' ) { - Add_recipe_to_list( pTmpBuf, TRUE, TRUE ); - rule = TRUE; - } - else - State = NORMAL_SCAN; - } - else { - if( *pTmpBuf == '\t' - || (Notabs && *pTmpBuf == ' ') ) { - Add_recipe_to_list( pTmpBuf, FALSE, FALSE ); - rule = TRUE; - } - else if( *p == ']' ) - Fatal( "Found unmatched ']'" ); - else if( *pTmpBuf ) /* Something that was no recipe. */ - State = NORMAL_SCAN; + State = NORMAL_SCAN; + } + else { + if( *pTmpBuf == '\t' + || (Notabs && *pTmpBuf == ' ') ) { + Add_recipe_to_list( pTmpBuf, FALSE, FALSE ); + rule = TRUE; + } + else if( *p == ']' ) + Fatal( "Found unmatched ']'" ); + else if( *pTmpBuf ) /* Something that was no recipe. */ + State = NORMAL_SCAN; /* The only thing that was not handled was an empty line. */ - } + } - if( State == RULE_SCAN ) break; /* ie. keep going */ + if( State == RULE_SCAN ) break; /* ie. keep going */ - Bind_rules_to_targets( (Group) ? F_GROUP: F_DEFAULT ); + Bind_rules_to_targets( (Group) ? F_GROUP: F_DEFAULT ); - rule = FALSE; - if( Group ) { - Group = FALSE; - break; - } - /*FALLTRHOUGH*/ + rule = FALSE; + if( Group ) { + Group = FALSE; + break; + } + /*FALLTRHOUGH*/ - /* In this case we broke out of the rule scan because we do not - * have a recipe line that begins with a <TAB>, so lets - * try to scan the thing as a macro or rule definition. */ + /* In this case we broke out of the rule scan because we do not + * have a recipe line that begins with a <TAB>, so lets + * try to scan the thing as a macro or rule definition. */ - case NORMAL_SCAN: - if( !*pTmpBuf ) continue; /* we have null input line */ + case NORMAL_SCAN: + if( !*pTmpBuf ) continue; /* we have null input line */ - /* STUPID AUGMAKE uses "include" at the start of a line as - * a signal to include a new file, so let's look for it. - * if we see it replace it by .INCLUDE: and stick this back - * into the buffer. */ - if( !strncmp( "include", pTmpBuf, 7 ) && - (pTmpBuf[7] == ' ' || pTmpBuf[7] == '\t') ) - { - char *tmp; + /* STUPID AUGMAKE uses "include" at the start of a line as + * a signal to include a new file, so let's look for it. + * if we see it replace it by .INCLUDE: and stick this back + * into the buffer. */ + if( !strncmp( "include", pTmpBuf, 7 ) && + (pTmpBuf[7] == ' ' || pTmpBuf[7] == '\t') ) + { + char *tmp; - tmp = DmStrJoin( ".INCLUDE:", pTmpBuf+7, -1, FALSE ); - strcpy( pTmpBuf, tmp ); - FREE( tmp ); - } + tmp = DmStrJoin( ".INCLUDE:", pTmpBuf+7, -1, FALSE ); + strcpy( pTmpBuf, tmp ); + FREE( tmp ); + } - /* look for a macro definition, they all contain an = sign - * if we fail to recognize it as a legal macro op then try to - * parse the same line as a rule definition, it's one or the - * other */ + /* look for a macro definition, they all contain an = sign + * if we fail to recognize it as a legal macro op then try to + * parse the same line as a rule definition, it's one or the + * other */ - if( Parse_macro(pTmpBuf, M_DEFAULT) ) break;/* it's a macro def*/ - if( Parse_rule_def( &State ) ) break;/* it's a rule def */ + if( Parse_macro(pTmpBuf, M_DEFAULT) ) break;/* it's a macro def*/ + if( Parse_rule_def( &State ) ) break;/* it's a rule def */ - /* if it is an empty or blank line then ignore it */ - if( !*Buffer || *DmStrSpn( Buffer, " \t\r\n" ) == '\0' ) break; + /* if it is an empty or blank line then ignore it */ + if( !*Buffer || *DmStrSpn( Buffer, " \t\r\n" ) == '\0' ) break; - /* otherwise assume it was a line of unrecognized input, or a - * recipe line out of place so print a message */ + /* otherwise assume it was a line of unrecognized input, or a + * recipe line out of place so print a message */ - Fatal( "Expecting macro or rule defn, found neither" ); - break; + Fatal( "Expecting macro or rule defn, found neither" ); + break; - default: - Fatal( "Internal -- UNKNOWN Parser state %d", State ); - } + default: + Fatal( "Internal -- UNKNOWN Parser state %d", State ); } - } + } + } } diff --git a/dmake/rulparse.c b/dmake/rulparse.c index af7915fb129b..f47f166ef7ae 100644 --- a/dmake/rulparse.c +++ b/dmake/rulparse.c @@ -75,72 +75,72 @@ Parse_rule_def( state )/* */ int *state; { - TKSTR input; /* input string struct for token search */ - CELLPTR targets; /* list of targets if any */ - CELLPTR prereq; /* list of prereq if any */ - CELLPTR prereqtail; /* tail of prerequisite list */ - CELLPTR cp; /* temporary cell pointer for list making */ - char *result; /* temporary storage for result */ - char *tok; /* temporary pointer for tokens */ - char *set_dir; /* value of setdir attribute */ - char *brk; /* break char list for Get_token */ - char *firstrcp; /* first recipe line, from ; in rule line */ - t_attr attr; /* sum of attribute flags for current tgts*/ - t_attr at; /* temp place to keep an attribute code */ - int op; /* rule operator */ - int special; /* indicate special targets in rule */ - int augmeta; /* indicate .<suffix> like target */ - int percent; /* indicate percent rule target */ - int percent_prq; /* indicate mixed %-rule prereq possible */ - - DB_ENTER( "Parse_rule_def" ); - - op = 0; - attr = 0; - special = 0; - augmeta = 0; - percent = 0; - set_dir = NIL( char ); - targets = NIL(CELL); - prereq = NIL(CELL); - prereqtail = NIL(CELL); - percent_prq = 0; - - /* Check to see if the line is of the form: - * targets : prerequisites; first recipe line - * If so remember the first_recipe part of the line. */ - - firstrcp = strchr( Buffer, ';' ); - if( firstrcp != NIL( char ) ) { - *firstrcp++ = 0; - firstrcp = DmStrSpn( firstrcp, " \t" ); - } - - result = Expand( Buffer ); - /* Remove CONTINUATION_CHAR, keep the <nl> */ - for( brk=strchr(result,CONTINUATION_CHAR); brk != NIL(char); brk=strchr(brk,CONTINUATION_CHAR) ) - if( brk[1] == '\n' ) - *brk = ' '; - else - brk++; - - DB_PRINT( "par", ("Scanning: [%s]", result) ); - - SET_TOKEN( &input, result ); - brk = ":-^!|"; - Def_targets = TRUE; + TKSTR input; /* input string struct for token search */ + CELLPTR targets; /* list of targets if any */ + CELLPTR prereq; /* list of prereq if any */ + CELLPTR prereqtail; /* tail of prerequisite list */ + CELLPTR cp; /* temporary cell pointer for list making */ + char *result; /* temporary storage for result */ + char *tok; /* temporary pointer for tokens */ + char *set_dir; /* value of setdir attribute */ + char *brk; /* break char list for Get_token */ + char *firstrcp; /* first recipe line, from ; in rule line */ + t_attr attr; /* sum of attribute flags for current tgts*/ + t_attr at; /* temp place to keep an attribute code */ + int op; /* rule operator */ + int special; /* indicate special targets in rule */ + int augmeta; /* indicate .<suffix> like target */ + int percent; /* indicate percent rule target */ + int percent_prq; /* indicate mixed %-rule prereq possible */ + + DB_ENTER( "Parse_rule_def" ); + + op = 0; + attr = 0; + special = 0; + augmeta = 0; + percent = 0; + set_dir = NIL( char ); + targets = NIL(CELL); + prereq = NIL(CELL); + prereqtail = NIL(CELL); + percent_prq = 0; + + /* Check to see if the line is of the form: + * targets : prerequisites; first recipe line + * If so remember the first_recipe part of the line. */ + + firstrcp = strchr( Buffer, ';' ); + if( firstrcp != NIL( char ) ) { + *firstrcp++ = 0; + firstrcp = DmStrSpn( firstrcp, " \t" ); + } + + result = Expand( Buffer ); + /* Remove CONTINUATION_CHAR, keep the <nl> */ + for( brk=strchr(result,CONTINUATION_CHAR); brk != NIL(char); brk=strchr(brk,CONTINUATION_CHAR) ) + if( brk[1] == '\n' ) + *brk = ' '; + else + brk++; + + DB_PRINT( "par", ("Scanning: [%s]", result) ); + + SET_TOKEN( &input, result ); + brk = ":-^!|"; + Def_targets = TRUE; + + /* Scan the input rule line collecting targets, the operator, and any + * prerequisites. Stop when we run out of targets and prerequisites. */ + + while( *(tok = Get_token( &input, brk, TRUE )) != '\0' ) + if( !op ) { + /* we are scanning targets and attributes + * check to see if token is an operator. */ + + op = Rule_op( tok ); - /* Scan the input rule line collecting targets, the operator, and any - * prerequisites. Stop when we run out of targets and prerequisites. */ - - while( *(tok = Get_token( &input, brk, TRUE )) != '\0' ) if( !op ) { - /* we are scanning targets and attributes - * check to see if token is an operator. */ - - op = Rule_op( tok ); - - if( !op ) { /* Define a new cell, or get pointer to pre-existing cell. */ /* Do we need cells for attributes? If not move the definition * to the target part. */ @@ -151,209 +151,209 @@ int *state; DB_PRINT( "par", ("tg_cell [%s]", tok) ); if( (at = _is_attribute(tok)) != 0 ) { - /* Ignore .SILENT when -vr is active. */ - if( (Verbose & V_FORCEECHO) && (at == A_SILENT) ) - at = 0; + /* Ignore .SILENT when -vr is active. */ + if( (Verbose & V_FORCEECHO) && (at == A_SILENT) ) + at = 0; - /* Logically OR the attributes specified into one main - * ATTRIBUTE mask. */ + /* Logically OR the attributes specified into one main + * ATTRIBUTE mask. */ - if( at == A_SETDIR ) { - if( set_dir != NIL( char ) ) - Warning( "Multiple .SETDIR attribute ignored" ); - else - set_dir = DmStrDup( tok ); - } + if( at == A_SETDIR ) { + if( set_dir != NIL( char ) ) + Warning( "Multiple .SETDIR attribute ignored" ); + else + set_dir = DmStrDup( tok ); + } - attr |= at; + attr |= at; } else { - /* Not an attribute, this must be a target. */ - int tmp; - - tmp = _is_special( tok ); - - if( _is_percent( tok ) ) { - /* First %-target checks if there were non-%-targets before. */ - if( !percent && targets != NIL(CELL) ) - Fatal( "A %%-target must not be mixed with non-%%-targets, offending target [%s]", tok ); - - percent++; - cp->ce_flag |= F_PERCENT; - } else { - if( percent ) - Fatal( "A non-%%-target must not be mixed with %%-targets, offending target [%s]", tok ); - } - - if( _is_magic( tok ) ) { - /* Check that AUGMAKE targets are not mixed with other - * targets. The return value of _is_magic() is discarded and - * calculated again in _do_targets() if this rule definition - * really is a .<suffix> like target. - * If we would allow only one target per line we could easily - * store the result for later, but for multiple .<suffix> - * targets this creates too much overhead. - * These targets should be rare (obsolete?) anyway. */ - if( !augmeta && targets != NIL(CELL) ) - Fatal( "An AUGMAKE meta target must not be mixed with non AUGMAKE meta targets, offending target [%s]", tok ); - - augmeta++; - cp->ce_flag |= F_MAGIC; /* do_magic will also add F_PERCENT later. */ - } else { - if( augmeta ) - Fatal( "A non AUGMAKE meta target must not be mixed with AUGMAKE meta targets, offending target [%s]", tok ); - } - - if( special ) - Fatal( "Special target must appear alone, found [%s]", tok ); - else if( !(cp->ce_flag & F_MARK) ) { - /* Targets are kept in this list in lexically sorted order. - * This allows for easy equality comparison of target - * sets.*/ - CELLPTR prev,cur; - for(prev=NIL(CELL),cur=targets;cur;prev=cur,cur=cur->ce_link) - if(strcmp(cur->CE_NAME,cp->CE_NAME) > 0) - break; - - cp->ce_link = cur; - - if (!prev) - targets = cp; + /* Not an attribute, this must be a target. */ + int tmp; + + tmp = _is_special( tok ); + + if( _is_percent( tok ) ) { + /* First %-target checks if there were non-%-targets before. */ + if( !percent && targets != NIL(CELL) ) + Fatal( "A %%-target must not be mixed with non-%%-targets, offending target [%s]", tok ); + + percent++; + cp->ce_flag |= F_PERCENT; + } else { + if( percent ) + Fatal( "A non-%%-target must not be mixed with %%-targets, offending target [%s]", tok ); + } + + if( _is_magic( tok ) ) { + /* Check that AUGMAKE targets are not mixed with other + * targets. The return value of _is_magic() is discarded and + * calculated again in _do_targets() if this rule definition + * really is a .<suffix> like target. + * If we would allow only one target per line we could easily + * store the result for later, but for multiple .<suffix> + * targets this creates too much overhead. + * These targets should be rare (obsolete?) anyway. */ + if( !augmeta && targets != NIL(CELL) ) + Fatal( "An AUGMAKE meta target must not be mixed with non AUGMAKE meta targets, offending target [%s]", tok ); + + augmeta++; + cp->ce_flag |= F_MAGIC; /* do_magic will also add F_PERCENT later. */ + } else { + if( augmeta ) + Fatal( "A non AUGMAKE meta target must not be mixed with AUGMAKE meta targets, offending target [%s]", tok ); + } + + if( special ) + Fatal( "Special target must appear alone, found [%s]", tok ); + else if( !(cp->ce_flag & F_MARK) ) { + /* Targets are kept in this list in lexically sorted order. + * This allows for easy equality comparison of target + * sets.*/ + CELLPTR prev,cur; + for(prev=NIL(CELL),cur=targets;cur;prev=cur,cur=cur->ce_link) + if(strcmp(cur->CE_NAME,cp->CE_NAME) > 0) + break; + + cp->ce_link = cur; + + if (!prev) + targets = cp; + else + prev->ce_link = cp; + + cp->ce_flag |= F_MARK | F_EXPLICIT; + special = tmp; + } else - prev->ce_link = cp; - - cp->ce_flag |= F_MARK | F_EXPLICIT; - special = tmp; - } - else - Warning( "Duplicate target [%s]", cp->CE_NAME ); + Warning( "Duplicate target [%s]", cp->CE_NAME ); } - } - else { + } + else { /* found an operator so empty out break list and clear mark * bits on target list, setting them all to F_VISITED*/ brk = ""; for( cp=targets; cp != NIL(CELL); cp=cp->ce_link ) { - cp->ce_flag ^= F_MARK; - cp->ce_flag |= F_VISITED; + cp->ce_flag ^= F_MARK; + cp->ce_flag |= F_VISITED; } Def_targets = FALSE; - } } - else { - /* Scanning prerequisites so build the prerequisite list. We use - * F_MARK flag to make certain we have only a single copy of the - * prerequisite in the list */ + } + else { + /* Scanning prerequisites so build the prerequisite list. We use + * F_MARK flag to make certain we have only a single copy of the + * prerequisite in the list */ - cp = Def_cell( tok ); + cp = Def_cell( tok ); - /* %-prerequisits require eiter a %-target or this might be a rule of - * the "ATTRIBUTE_LIST : targets" form. */ - if( _is_percent( tok ) ) { + /* %-prerequisits require eiter a %-target or this might be a rule of + * the "ATTRIBUTE_LIST : targets" form. */ + if( _is_percent( tok ) ) { if( percent || ((targets == NIL(CELL)) && attr) ) - percent_prq = 1; + percent_prq = 1; else - Fatal( "Syntax error in %% rule, missing %% target"); - } + Fatal( "Syntax error in %% rule, missing %% target"); + } - if( cp->ce_flag & F_VISITED ) { + if( cp->ce_flag & F_VISITED ) { if( cp->ce_attr & A_COMPOSITE ) - continue; + continue; else - Fatal( "Detected circular dependency in graph at [%s]", - cp->CE_NAME ); - } - else if( !(cp->ce_flag & F_MARK) ) { + Fatal( "Detected circular dependency in graph at [%s]", + cp->CE_NAME ); + } + else if( !(cp->ce_flag & F_MARK) ) { DB_PRINT( "par", ("pq_cell [%s]", tok) ); cp->ce_flag |= F_MARK; if( prereqtail == NIL(CELL) ) /* keep prereq's in order */ - prereq = cp; + prereq = cp; else - prereqtail->ce_link = cp; + prereqtail->ce_link = cp; prereqtail = cp; cp->ce_link = NIL(CELL); - } - else if( !(cp->ce_attr & A_LIBRARY) && (Verbose & V_WARNALL)) - Warning("Duplicate entry [%s] in prerequisite list",cp->CE_NAME); } - - /* Check to see if we have a percent rule that has only global - * prerequisites, i.e. they are of the form: "%.a : foo". - * If so then set the flag so that later on, we don't issue - * an error if such targets supply an empty set of rules. */ - - if( percent && !percent_prq && (prereq != NIL(CELL)) ) - _sv_globprq_only = 1; - - /* It's ok to have targets with attributes, and no prerequisites, but it's - * not ok to have no targets and no attributes, or no operator */ - - if( !op ) { - CLEAR_TOKEN( &input ); - DB_PRINT( "par", ("Not a rule [%s]", Buffer) ); - DB_RETURN( 0 ); - } - - /* More than one percent target didn't work with prior versions. */ - if( (percent > 1) && !(op & R_OP_OR) ) - Warning( "Prior to dmake 4.5 only one\n" - "%%-target per target-definition worked reliably. Check your makefiles.\n" ); - - if( !attr && targets == NIL(CELL) ) { - Fatal( "Missing targets or attributes in rule" ); - if( set_dir != NIL( char )) FREE( set_dir ); - DB_RETURN( 0 ); - } - - /* We have established we have a legal rules line, so we must process it. - * In doing so we must handle any special targets. Special targets must - * appear alone possibly accompanied by attributes. - * NOTE: special != 0 ==> targets != NIL(CELL) */ - - if( prereqtail != NIL(CELL) ) prereqtail->ce_link = NIL(CELL); - - /* Clear out MARK bits used in duplicate checking. I originally wanted - * to do this as the lists get processed but that got too error prone - * so I bit the bullit and added these two loops. */ - - for( cp=prereq; cp != NIL(CELL); cp=cp->ce_link ) cp->ce_flag &= ~F_MARK; - for( cp=targets; cp != NIL(CELL); cp=cp->ce_link ) cp->ce_flag &= ~F_VISITED; - - /* Check to see if the previous recipe was bound, if not the call - * Bind_rules_to_targets() to bind the recipe (_sv_rules) to the - * target(s) (_sv_targets). */ - /* was: if( _sv_rules != NIL(STRING) ) Bind_rules_to_targets( F_DEFAULT );*/ - /* Only Add_recipe_to_list() sets _sv_rules and Bind_rules_to_targets() - * clears the (static) variables again. Bind_rules_to_targets() is - * (should be) called after State is leaving RULE_SCAN in Parse(). - * Abort if there are unbound recipes. FIXME: Remove this paragraph - * if this never occurs. */ - if( _sv_rules != NIL(STRING) ) - Fatal( "Internal Error: _sv_rules not empty." ); - - /* Add the first recipe line to the list */ - if( firstrcp != NIL( char ) ) - Add_recipe_to_list( firstrcp, TRUE, FALSE ); - - /* Save these prior to calling _do_targets, since _build_graph needs the - * _sv_setdir value for matching edges. */ - _sv_op = op; - _sv_setdir = set_dir; - - if( special ) - /* _do_special() can alter *state */ - _do_special( special, op, attr, set_dir, targets, prereq, state ); - else - *state = _do_targets( op, attr, set_dir, targets, prereq ); - - if( (*state != RULE_SCAN) && (_sv_rules != NIL(STRING)) ) - Fatal( "Unexpected recipe found." ); - - DB_RETURN( 1 ); + else if( !(cp->ce_attr & A_LIBRARY) && (Verbose & V_WARNALL)) + Warning("Duplicate entry [%s] in prerequisite list",cp->CE_NAME); + } + + /* Check to see if we have a percent rule that has only global + * prerequisites, i.e. they are of the form: "%.a : foo". + * If so then set the flag so that later on, we don't issue + * an error if such targets supply an empty set of rules. */ + + if( percent && !percent_prq && (prereq != NIL(CELL)) ) + _sv_globprq_only = 1; + + /* It's ok to have targets with attributes, and no prerequisites, but it's + * not ok to have no targets and no attributes, or no operator */ + + CLEAR_TOKEN( &input ); FREE(result); result = NIL(char); + if( !op ) { + DB_PRINT( "par", ("Not a rule [%s]", Buffer) ); + DB_RETURN( 0 ); + } + + /* More than one percent target didn't work with prior versions. */ + if( (percent > 1) && !(op & R_OP_OR) ) + Warning( "Prior to dmake 4.5 only one\n" + "%%-target per target-definition worked reliably. Check your makefiles.\n" ); + + if( !attr && targets == NIL(CELL) ) { + Fatal( "Missing targets or attributes in rule" ); + if( set_dir != NIL( char )) FREE( set_dir ); + DB_RETURN( 0 ); + } + + /* We have established we have a legal rules line, so we must process it. + * In doing so we must handle any special targets. Special targets must + * appear alone possibly accompanied by attributes. + * NOTE: special != 0 ==> targets != NIL(CELL) */ + + if( prereqtail != NIL(CELL) ) prereqtail->ce_link = NIL(CELL); + + /* Clear out MARK bits used in duplicate checking. I originally wanted + * to do this as the lists get processed but that got too error prone + * so I bit the bullit and added these two loops. */ + + for( cp=prereq; cp != NIL(CELL); cp=cp->ce_link ) cp->ce_flag &= ~F_MARK; + for( cp=targets; cp != NIL(CELL); cp=cp->ce_link ) cp->ce_flag &= ~F_VISITED; + + /* Check to see if the previous recipe was bound, if not the call + * Bind_rules_to_targets() to bind the recipe (_sv_rules) to the + * target(s) (_sv_targets). */ + /* was: if( _sv_rules != NIL(STRING) ) Bind_rules_to_targets( F_DEFAULT );*/ + /* Only Add_recipe_to_list() sets _sv_rules and Bind_rules_to_targets() + * clears the (static) variables again. Bind_rules_to_targets() is + * (should be) called after State is leaving RULE_SCAN in Parse(). + * Abort if there are unbound recipes. FIXME: Remove this paragraph + * if this never occurs. */ + if( _sv_rules != NIL(STRING) ) + Fatal( "Internal Error: _sv_rules not empty." ); + + /* Add the first recipe line to the list */ + if( firstrcp != NIL( char ) ) + Add_recipe_to_list( firstrcp, TRUE, FALSE ); + + /* Save these prior to calling _do_targets, since _build_graph needs the + * _sv_setdir value for matching edges. */ + _sv_op = op; + _sv_setdir = set_dir; + + if( special ) + /* _do_special() can alter *state */ + _do_special( special, op, attr, set_dir, targets, prereq, state ); + else + *state = _do_targets( op, attr, set_dir, targets, prereq ); + + if( (*state != RULE_SCAN) && (_sv_rules != NIL(STRING)) ) + Fatal( "Unexpected recipe found." ); + + DB_RETURN( 1 ); } @@ -576,240 +576,239 @@ CELLPTR target; CELLPTR prereq; int *state; { - HASHPTR hp; /* pointer to macro def cell */ - CELLPTR cp; /* temporary pointer into cells list */ - CELLPTR dp; /* pointer to directory dir cell */ - LINKPTR lp; /* pointer at prerequisite list */ - char *dir; /* current dir to prepend */ - char *path; /* resulting path to try to read */ - char *name; /* File name for processing a .INCLUDE */ - char *tmp; /* temporary string pointer */ - FILE *fil; /* File descriptor returned by Openfile */ + HASHPTR hp; /* pointer to macro def cell */ + CELLPTR cp; /* temporary pointer into cells list */ + CELLPTR dp; /* pointer to directory dir cell */ + LINKPTR lp; /* pointer at prerequisite list */ + char *dir; /* current dir to prepend */ + char *path; /* resulting path to try to read */ + char *name; /* File name for processing a .INCLUDE */ + char *tmp; /* temporary string pointer */ + FILE *fil; /* File descriptor returned by Openfile */ - DB_ENTER( "_do_special" ); + DB_ENTER( "_do_special" ); - target->ce_flag = F_SPECIAL; /* mark the target as special */ + target->ce_flag = F_SPECIAL; /* mark the target as special */ - switch( special ) { - case ST_EXPORT: - for( ; prereq != NIL(CELL); prereq = prereq->ce_link ) { - DB_PRINT( "par", ("Exporting [%s]", prereq->CE_NAME) ); - hp = GET_MACRO( prereq->CE_NAME ); + switch( special ) { + case ST_EXPORT: + for( ; prereq != NIL(CELL); prereq = prereq->ce_link ) { + DB_PRINT( "par", ("Exporting [%s]", prereq->CE_NAME) ); + hp = GET_MACRO( prereq->CE_NAME ); - if( hp != NIL(HASH) ) { - char *tmpstr = hp->ht_value; + if( hp != NIL(HASH) ) { + char *tmpstr = hp->ht_value; - if( tmpstr == NIL(char) ) tmpstr = ""; + if( tmpstr == NIL(char) ) tmpstr = ""; - if( Write_env_string( prereq->CE_NAME, tmpstr ) != 0 ) + if( Write_env_string( prereq->CE_NAME, tmpstr ) != 0 ) Warning( "Could not export %s", prereq->CE_NAME ); - } - } - break; + } + } + break; - /* Simply cause the parser to fail on the next input read */ - case ST_EXIT: - Skip_to_eof = TRUE; - break; + /* Simply cause the parser to fail on the next input read */ + case ST_EXIT: + Skip_to_eof = TRUE; + break; - case ST_IMPORT: - for( ; prereq != NIL(CELL); prereq = prereq->ce_link ) { - char *tmpstr; + case ST_IMPORT: + for( ; prereq != NIL(CELL); prereq = prereq->ce_link ) { + char *tmpstr; - DB_PRINT( "par", ("Importing [%s]", prereq->CE_NAME) ); + DB_PRINT( "par", ("Importing [%s]", prereq->CE_NAME) ); - if( strcmp(prereq->CE_NAME, ".EVERYTHING") == 0 ) { - t_attr sattr = Glob_attr; - Glob_attr |= A_SILENT; + if( strcmp(prereq->CE_NAME, ".EVERYTHING") == 0 ) { + t_attr sattr = Glob_attr; + Glob_attr |= A_SILENT; - ReadEnvironment(); + ReadEnvironment(); - Glob_attr = sattr; - } - else { - tmpstr = Read_env_string( prereq->CE_NAME ); + Glob_attr = sattr; + } + else { + tmpstr = Read_env_string( prereq->CE_NAME ); - if( tmpstr != NIL(char) ) + if( tmpstr != NIL(char) ) Def_macro(prereq->CE_NAME, tmpstr, M_EXPANDED|M_LITERAL); - else + else if( !((Glob_attr | attr) & A_IGNORE) ) - Fatal("Imported macro `%s' not found",prereq->CE_NAME); - } - } + Fatal("Imported macro `%s' not found",prereq->CE_NAME); + } + } - attr &= ~A_IGNORE; - break; + attr &= ~A_IGNORE; + break; - case ST_INCLUDE: - { - int pushed = FALSE; - int first = (attr & A_FIRST); - int ignore = (((Glob_attr | attr) & A_IGNORE) != 0); - int found = FALSE; - int noinf = (attr & A_NOINFER); - LINKPTR prqlnk = NIL(LINK); - LINKPTR prqlst = NIL(LINK); + case ST_INCLUDE: + { + int pushed = FALSE; + int first = (attr & A_FIRST); + int ignore = (((Glob_attr | attr) & A_IGNORE) != 0); + int found = FALSE; + int noinf = (attr & A_NOINFER); + LINKPTR prqlnk = NIL(LINK); + LINKPTR prqlst = NIL(LINK); - if( prereq == NIL(CELL) ) Fatal( "No .INCLUDE file(s) specified" ); + if( prereq == NIL(CELL) ) Fatal( "No .INCLUDE file(s) specified" ); - dp = Def_cell( ".INCLUDEDIRS" ); + dp = Def_cell( ".INCLUDEDIRS" ); - if( (attr & A_SETDIR) && *(dir = strchr(set_dir, '=')+1) ) + if( (attr & A_SETDIR) && *(dir = strchr(set_dir, '=')+1) ) pushed = Push_dir( dir, ".INCLUDE", ignore ); - for( cp=prereq; cp != NIL(CELL); cp = cp->ce_link ) { + for( cp=prereq; cp != NIL(CELL); cp = cp->ce_link ) { LINKPTR ltmp; TALLOC(ltmp, 1, LINK); ltmp->cl_prq = cp; if( prqlnk == NIL(LINK) ) - prqlst = ltmp; + prqlst = ltmp; else - prqlnk->cl_next = ltmp; + prqlnk->cl_next = ltmp; prqlnk = ltmp; - } + } - for( ; prqlst != NIL(LINK); FREE(prqlst), prqlst=prqlnk ) { + for( ; prqlst != NIL(LINK); FREE(prqlst), prqlst=prqlnk ) { prqlnk = prqlst->cl_next; cp = prqlst->cl_prq; name = cp->CE_NAME; /* Leave this here, it ensures that prqlst gets propely free'd */ if ( first && found ) - continue; + continue; if( *name == '<' ) { - /* We have a file name enclosed in <....> - * so get rid of the <> arround the file name */ + /* We have a file name enclosed in <....> + * so get rid of the <> arround the file name */ - name++; - if( (tmp = strrchr( name, '>' )) != NIL( char ) ) - *tmp = 0; + name++; + if( (tmp = strrchr( name, '>' )) != NIL( char ) ) + *tmp = 0; - if( If_root_path( name ) ) - fil = Openfile( name, FALSE, FALSE ); - else - fil = NIL(FILE); + if( If_root_path( name ) ) + fil = Openfile( name, FALSE, FALSE ); + else + fil = NIL(FILE); } else - fil = Openfile( name, FALSE, FALSE ); + fil = Openfile( name, FALSE, FALSE ); if( fil == NIL(FILE) && !If_root_path( name ) ) { /*if true ==> not found in current dir*/ - /* Now we must scan the list of prerequisites for .INCLUDEDIRS - * looking for the file in each of the specified directories. - * if we don't find it then we issue an error. The error - * message is suppressed if the .IGNORE attribute of attr is - * set. If a file is found we call Parse on the file to - * perform the parse and then continue on from where we left - * off. */ + /* Now we must scan the list of prerequisites for .INCLUDEDIRS + * looking for the file in each of the specified directories. + * if we don't find it then we issue an error. The error + * message is suppressed if the .IGNORE attribute of attr is + * set. If a file is found we call Parse on the file to + * perform the parse and then continue on from where we left + * off. */ - for(lp=dp->CE_PRQ; lp && fil == NIL(FILE); lp=lp->cl_next) { - dir = lp->cl_prq->CE_NAME; - if( strchr(dir, '$') ) dir = Expand(dir); - path = Build_path( dir, name ); + for(lp=dp->CE_PRQ; lp && fil == NIL(FILE); lp=lp->cl_next) { + dir = lp->cl_prq->CE_NAME; + if( strchr(dir, '$') ) dir = Expand(dir); + path = Build_path( dir, name ); - DB_PRINT( "par", ("Trying to include [%s]", path) ); + DB_PRINT( "par", ("Trying to include [%s]", path) ); - fil = Openfile( path, FALSE, FALSE ); - if( dir != lp->cl_prq->CE_NAME ) FREE(dir); - } + fil = Openfile( path, FALSE, FALSE ); + if( dir != lp->cl_prq->CE_NAME ) FREE(dir); + } } if (!noinf && fil == NIL(FILE)) { - t_attr glob = Glob_attr; - t_attr cattr = prqlst->cl_prq->ce_attr; + t_attr glob = Glob_attr; + t_attr cattr = prqlst->cl_prq->ce_attr; - prqlst->cl_next = NIL(LINK); - Glob_attr |= (attr&A_IGNORE); - prqlst->cl_prq->ce_attr &= ~A_FRINGE; + prqlst->cl_next = NIL(LINK); + Glob_attr |= (attr&A_IGNORE); + prqlst->cl_prq->ce_attr &= ~A_FRINGE; - if( Verbose & V_FILE_IO ) - printf( "%s: Inferring include file [%s].\n", - Pname, name ); - fil = TryFiles(prqlst); + if( Verbose & V_FILE_IO ) + printf( "%s: Inferring include file [%s].\n", + Pname, name ); + fil = TryFiles(prqlst); - Glob_attr = glob; - prqlst->cl_prq->ce_attr |= (cattr & A_FRINGE); + Glob_attr = glob; + prqlst->cl_prq->ce_attr |= (cattr & A_FRINGE); } if( fil != NIL(FILE) ) { - if( Verbose & V_FILE_IO ) - printf( "%s: Parsing include file [%s].\n", - Pname, name ); - Parse( fil ); - found = TRUE; + if( Verbose & V_FILE_IO ) + printf( "%s: Parsing include file [%s].\n", + Pname, name ); + Parse( fil ); + found = TRUE; } else if( !(ignore || first) ) - Fatal( "Include file %s, not found", name ); + Fatal( "Include file %s, not found", name ); else if( Verbose & V_FILE_IO ) - printf( "%s: Include file [%s] was not found.\n", - Pname, name ); - } + printf( "%s: Include file [%s] was not found.\n", + Pname, name ); + } - if ( !ignore && first && !found ) + if ( !ignore && first && !found ) Fatal( "No include file was found" ); - if( pushed ) Pop_dir(FALSE); - attr &= ~(A_IGNORE|A_SETDIR|A_FIRST|A_NOINFER); - } - break; + if( pushed ) Pop_dir(FALSE); + attr &= ~(A_IGNORE|A_SETDIR|A_FIRST|A_NOINFER); + } + break; + + case ST_SOURCE: + if( prereq != NIL(CELL) ) + _do_targets( op & (R_OP_CL | R_OP_MI | R_OP_UP), attr, set_dir, + target, prereq ); + else { + /* The old semantics of .SOURCE were that an empty list of + * prerequisites clears the .SOURCE list. So we must implement + * that here as a clearout prerequisite operation. Since this is + * a standard operation with the :- opcode we can simply call the + * proper routine with the target cell and it should do the trick + */ - case ST_SOURCE: - if( prereq != NIL(CELL) ) - _do_targets( op & (R_OP_CL | R_OP_MI | R_OP_UP), attr, set_dir, - target, prereq ); - else { - /* The old semantics of .SOURCE were that an empty list of - * prerequisites clears the .SOURCE list. So we must implement - * that here as a clearout prerequisite operation. Since this is - * a standard operation with the :- opcode we can simply call the - * proper routine with the target cell and it should do the trick - */ + if( op == R_OP_CL || (op & R_OP_MI) ) + Clear_prerequisites( target ); + } - if( op == R_OP_CL || (op & R_OP_MI) ) - Clear_prerequisites( target ); - } + op &= ~(R_OP_MI | R_OP_UP); + break; - op &= ~(R_OP_MI | R_OP_UP); - break; - - case ST_KEEP: - if( Keep_state != NIL(char) ) break; - Def_macro( ".KEEP_STATE", "_state.mk", M_EXPANDED ); - break; + case ST_KEEP: + if( Keep_state != NIL(char) ) break; + Def_macro( ".KEEP_STATE", "_state.mk", M_EXPANDED ); + break; - case ST_REST: - /* The rest of the special targets can all take recipes, as such they - * must be able to affect the state of the parser. */ + case ST_REST: + /* The rest of the special targets can all take recipes, as such they + * must be able to affect the state of the parser. */ - { - int s_targ = Target; + { + int s_targ = Target; - Target = TRUE; - _sp_target = TRUE; - *state = _do_targets( op, attr, set_dir, target, prereq ); - Target = s_targ; + Target = TRUE; + _sp_target = TRUE; + *state = _do_targets( op, attr, set_dir, target, prereq ); + Target = s_targ; - target->ce_flag |= F_TARGET; + target->ce_flag |= F_TARGET; - attr = A_DEFAULT; - op = R_OP_CL; - } - break; + attr = A_DEFAULT; + op = R_OP_CL; + } + break; - default:break; - } + default:break; + } - if( op != R_OP_CL ) Warning( "Modifier(s) for operator ignored" ); - if( attr != A_DEFAULT ) Warning( "Extra attributes ignored" ); + if( op != R_OP_CL ) Warning( "Modifier(s) for operator ignored" ); + if( attr != A_DEFAULT ) Warning( "Extra attributes ignored" ); - DB_VOID_RETURN; + DB_VOID_RETURN; } - static int _do_targets( op, attr, set_dir, targets, prereq )/* =================================================== diff --git a/dmake/sysintf.c b/dmake/sysintf.c index d7b482a3e405..65104114923f 100644 --- a/dmake/sysintf.c +++ b/dmake/sysintf.c @@ -420,7 +420,6 @@ char *ename; } - /* ** Set the value of the environment string ename to value. ** Returns 0 if success, non-zero if failure @@ -430,16 +429,23 @@ Write_env_string(ename, value) char *ename; char *value; { - char* p; - char* envstr = DmStrAdd(ename, value, FALSE); +#if defined(HAVE_SETENV) - p = envstr+strlen(ename); /* Don't change this code, DmStrAdd does not */ - *p++ = '='; /* add the space if *value is 0, it does */ - if( !*value ) *p = '\0'; /* allocate enough memory for one though. */ + return( setenv(ename, value, 1) ); - return( putenv(envstr) ); -} +#else /* !HAVE_SETENV */ + + char* p; + char* envstr = DmStrAdd(ename, value, FALSE); + p = envstr+strlen(ename); /* Don't change this code, DmStrAdd does not */ + *p++ = '='; /* add the space if *value is 0, it does */ + if( !*value ) *p = '\0'; /* allocate enough memory for one though. */ + + return( putenv(envstr) ); /* Possibly leaking 'envstr' */ + +#endif /* !HAVE_SETENV */ +} PUBLIC void diff --git a/dmake/unix/runargv.c b/dmake/unix/runargv.c index 4be342bbb273..e8e39d21bd3d 100644 --- a/dmake/unix/runargv.c +++ b/dmake/unix/runargv.c @@ -878,41 +878,36 @@ int wfc; /* Never change MAXPROCESS after _procs is allocated. */ if( _procs_size != Max_proc ) { - /* If procs was never initialize this is OK, do it now. */ - if( _procs == NIL(PR) ) { - _procs_size = Max_proc; - TALLOC( _procs, Max_proc, PR ); + /* If procs was never initialize this is OK, do it now. */ + if( _procs == NIL(PR) ) { + _procs_size = Max_proc; + TALLOC( _procs, Max_proc, PR ); #if defined(USE_CREATEPROCESS) - TALLOC( _wpList, Max_proc, HANDLE ); + TALLOC( _wpList, Max_proc, HANDLE ); - /* Signed int values are cast to DMHANDLE in various places, use this - * sanity check to verify that DMHANDLE is large enough. */ - if( sizeof(int) > sizeof(DMHANDLE) ) - Fatal( "Internal Error: Check type of DMHANDLE!" ); + /* Signed int values are cast to DMHANDLE in various places, use this + * sanity check to verify that DMHANDLE is large enough. */ + if( sizeof(int) > sizeof(DMHANDLE) ) + Fatal( "Internal Error: Check type of DMHANDLE!" ); #endif - } - else { - Fatal( "MAXPROCESS changed from `%d' to `%d' after a command was executed!", _procs_size, Max_proc ); - } + } + else { + Fatal( "MAXPROCESS changed from `%d' to `%d' after a command was executed!", _procs_size, Max_proc ); + } } if( Measure & M_RECIPE ) Do_profile_output( "s", M_RECIPE, target ); - /* If _use_i!=-1 then this function is called by _finished_child() - * ( through runargv() ). */ + /* If _use_i ! =-1 then this function is called by _finished_child() ( through runargv() ), + and we re-use the process queue number given by _use_i. */ if( (i = _use_i) == -1 ) { - for( i=0; i<Max_proc; i++ ) - if( !_procs[i].pr_valid ) - break; - } - else { - /* Re-use the process queue number given by _use_i. - * Free the pointer before using it again below. */ - FREE( _procs[i].pr_dir ); + for( i=0; i<Max_proc; i++ ) + if( !_procs[i].pr_valid ) + break; } - pp = _procs+i; + pp = &(_procs[i]); pp->pr_valid = 1; pp->pr_pid = pid.pid; @@ -921,7 +916,9 @@ int wfc; pp->pr_ignore = ignore; pp->pr_last = last; pp->pr_wfc = wfc; - /* Freed above and after the last recipe in _finished child(). */ + + if( pp->pr_dir != NIL(char) ) + FREE(pp->pr_dir); pp->pr_dir = DmStrDup(Get_current_dir()); Current_target = NIL(CELL); @@ -953,80 +950,80 @@ _finished_child(cid, status)/* DMHANDLE cid; int status; { - register int i; - char *dir; - - if((int)cid < 1) { /* Force int. */ - /* internal command */ - i = -((int)cid); - } - else { - for( i=0; i<Max_proc; i++ ) - if( _procs[i].pr_valid && _procs[i].pr_pid == cid ) + register int i; + char *dir; + + if((int)cid < 1) { /* Force int. */ + /* internal command */ + i = -((int)cid); + } + else { + for( i=0; i<Max_proc; i++ ) + if( _procs[i].pr_valid && _procs[i].pr_pid == cid ) break; - /* Some children we didn't make esp true if using /bin/sh to execute a - * a pipe and feed the output as a makefile into dmake. */ - if( i == Max_proc ) { - Warning("Internal Warning: finished pid %d is not in pq!?", cid); - return; - } - } + /* Some children we didn't make esp true if using /bin/sh to execute a + * a pipe and feed the output as a makefile into dmake. */ + if( i == Max_proc ) { + Warning("Internal Warning: finished pid %d is not in pq!?", cid); + return; + } + } - /* Not a running process anymore, the next runargv() will not use - * _attach_cmd(). */ - _procs[i].pr_valid = 0; + /* Not a running process anymore, the next runargv() will not use + * _attach_cmd(). */ + _procs[i].pr_valid = 0; - if( Measure & M_RECIPE ) - Do_profile_output( "e", M_RECIPE, _procs[i].pr_target ); + if( Measure & M_RECIPE ) + Do_profile_output( "e", M_RECIPE, _procs[i].pr_target ); - _proc_cnt--; - dir = DmStrDup(Get_current_dir()); - Set_dir( _procs[i].pr_dir ); + _proc_cnt--; + dir = DmStrDup(Get_current_dir()); + Set_dir( _procs[i].pr_dir ); - if( _procs[i].pr_recipe != NIL(RCP) && !_abort_flg ) { - RCPPTR rp = _procs[i].pr_recipe; + if( _procs[i].pr_recipe != NIL(RCP) && !_abort_flg ) { + RCPPTR rp = _procs[i].pr_recipe; - Current_target = _procs[i].pr_target; - Handle_result( status, _procs[i].pr_ignore, FALSE, _procs[i].pr_target ); - Current_target = NIL(CELL); + Current_target = _procs[i].pr_target; + Handle_result( status, _procs[i].pr_ignore, FALSE, _procs[i].pr_target ); + Current_target = NIL(CELL); - if ( _procs[i].pr_target->ce_attr & A_ERROR ) { - _procs[i].pr_last = TRUE; - goto ABORT_REMAINDER_OF_RECIPE; - } + if ( _procs[i].pr_target->ce_attr & A_ERROR ) { + _procs[i].pr_last = TRUE; + goto ABORT_REMAINDER_OF_RECIPE; + } - _procs[i].pr_recipe = rp->prp_next; + _procs[i].pr_recipe = rp->prp_next; - _use_i = i; - /* Run next recipe line. The rp->prp_attr propagates a possible - * wfc condition. */ - runargv( _procs[i].pr_target, rp->prp_group, - rp->prp_last, rp->prp_attr, &rp->prp_cmd ); - _use_i = -1; + _use_i = i; + /* Run next recipe line. The rp->prp_attr propagates a possible + * wfc condition. */ + runargv( _procs[i].pr_target, rp->prp_group, + rp->prp_last, rp->prp_attr, &rp->prp_cmd ); + _use_i = -1; - FREE( rp->prp_cmd ); - FREE( rp ); + FREE( rp->prp_cmd ); + FREE( rp ); - /* If all process queues are used wait for the next process to - * finish. Is this really needed here? */ - if( _proc_cnt == Max_proc ) { - Wait_for_child( FALSE, -1 ); - } - } - else { - /* empty the queue on abort. */ - if( _abort_flg ) - _procs[i].pr_recipe = NIL(RCP); + /* If all process queues are used wait for the next process to + * finish. Is this really needed here? */ + if( _proc_cnt == Max_proc ) { + Wait_for_child( FALSE, -1 ); + } + } + else { + /* empty the queue on abort. */ + if( _abort_flg ) + _procs[i].pr_recipe = NIL(RCP); - Handle_result(status,_procs[i].pr_ignore,_abort_flg,_procs[i].pr_target); + Handle_result(status,_procs[i].pr_ignore,_abort_flg,_procs[i].pr_target); - ABORT_REMAINDER_OF_RECIPE: - if( _procs[i].pr_last ) { - FREE(_procs[i].pr_dir ); /* Set in _add_child() */ + ABORT_REMAINDER_OF_RECIPE: + if( _procs[i].pr_last ) { + FREE(_procs[i].pr_dir ); _procs[i].pr_dir = NIL(char); /* Set in _add_child() */ - if( !Doing_bang ) { + if( !Doing_bang ) { /* Update_time_stamp() triggers the deletion of intermediate * targets. This starts a new process queue, so we have to * clear the _use_i variable. */ @@ -1035,12 +1032,12 @@ int status; _use_i = -1; Update_time_stamp( _procs[i].pr_target ); _use_i = my_use_i; - } } - } + } + } - Set_dir(dir); - FREE(dir); + Set_dir(dir); + FREE(dir); } diff --git a/instsetoo_native/prj/build.lst b/instsetoo_native/prj/build.lst index 68edddfe9b28..490d2e4a5c9b 100644 --- a/instsetoo_native/prj/build.lst +++ b/instsetoo_native/prj/build.lst @@ -1,4 +1,4 @@ -oon instsetoo_native :: l10n postprocess packimages testautomation ooo_custom_images NULL +oon instsetoo_native :: L10N:l10n postprocess packimages testautomation ooo_custom_images NULL oon instsetoo_native usr1 - all oon_mkout NULL oon instsetoo_native\inc_openoffice\unix nmake - u oon_unix NULL oon instsetoo_native\inc_openoffice\windows\msi_languages nmake - all oon_msilang NULL diff --git a/instsetoo_native/util/openoffice.lst b/instsetoo_native/util/openoffice.lst index eb036d6864ff..8ea316d1baa2 100644 --- a/instsetoo_native/util/openoffice.lst +++ b/instsetoo_native/util/openoffice.lst @@ -6,7 +6,7 @@ Globals { OOOBASEVERSION 3.4 OOOPACKAGEVERSION 3.4.0 - UREPACKAGEVERSION 1.8.0 + UREPACKAGEVERSION 3.4.0 URELAYERVERSION 1 BASISROOTNAME OpenOffice.org UNIXBASISROOTNAME openoffice.org @@ -23,7 +23,7 @@ Globals USE_FILEVERSION 1 LIBRARYVERSION 9.4.0 POOLPRODUCT 1 - REGISTRATION_HOST https://registration2.services.openoffice.org/RegistrationWeb + REGISTRATION_HOST https://hs-ws1.oracle.com/RegistrationWeb REGISTRATIONURL http://survey.services.openoffice.org/user/index.php PROGRESSBARCOLOR 14,133,205 PROGRESSSIZE 320,7 @@ -254,8 +254,8 @@ URE variables { PRODUCTNAME URE - PRODUCTVERSION 1.8 - PACKAGEVERSION 1.8 + PRODUCTVERSION 3.4 + PACKAGEVERSION 3.4 PACKAGEREVISION 1 PRODUCTEXTENSION LONG_PRODUCTEXTENSION @@ -312,6 +312,7 @@ OpenOffice_SDK IGNOREDIRECTORYLAYER 1 NOVERSIONINDIRNAME 0 NOSPACEINDIRECTORYNAME 1 + NOSHORTDIRECTORYNAMES 1 CHANGETARGETDIR 1 DOWNLOADBANNER ooosdkbanner.bmp DOWNLOADBITMAP ooosdkbitmap.bmp @@ -364,6 +365,7 @@ OpenOffice_Dev_SDK IGNOREDIRECTORYLAYER 1 NOVERSIONINDIRNAME 0 NOSPACEINDIRECTORYNAME 1 + NOSHORTDIRECTORYNAMES 1 CHANGETARGETDIR 1 DOWNLOADBANNER ooosdkbanner.bmp DOWNLOADBITMAP ooosdkbitmap.bmp diff --git a/scp2/prj/build.lst b/scp2/prj/build.lst index f3fbbec38273..10632bfc4d45 100644 --- a/scp2/prj/build.lst +++ b/scp2/prj/build.lst @@ -1,4 +1,4 @@ -cp scp2 : l10n i18npool setup_native l10ntools PYTHON:python ICU:icu REDLAND:redland LIBXSLT:libxslt NULL +cp scp2 : L10N:l10n i18npool setup_native l10ntools PYTHON:python ICU:icu REDLAND:redland LIBXSLT:libxslt NULL cp scp2 usr1 - all cp_mkout NULL cp scp2\macros nmake - all cp_langmacros NULL cp scp2\source\templates nmake - all cp_langtemplates NULL diff --git a/scp2/source/ooo/scpaction_ooo.scp b/scp2/source/ooo/scpaction_ooo.scp index d6f294f1da08..b95df7d7f3ac 100644 --- a/scp2/source/ooo/scpaction_ooo.scp +++ b/scp2/source/ooo/scpaction_ooo.scp @@ -347,15 +347,6 @@ ScpAction scp_Copy_Xpd_Help_Html_Uninstallationprologue_En_Us Subdir = "installdata/html"; End -#if defined LINUX || defined SOLARIS -ScpAction scp_Copy_Update_Script - Copy = "update"; - Name = "update"; - Styles = (SCPZIP_REPLACE); - UnixRights = 775; -End -#endif - #ifdef MACOSX ScpAction scp_Copy_Dmg_Background_Image #if defined(BUILD_SPECIAL) diff --git a/scp2/source/ooo/ure.scp b/scp2/source/ooo/ure.scp index 804f0edad0b2..2d6b8858eca1 100755 --- a/scp2/source/ooo/ure.scp +++ b/scp2/source/ooo/ure.scp @@ -296,14 +296,6 @@ File gid_File_Dl_Reg // CompID = "D5313B1F-D09F-401F-B180-891F70D489ED"; End -File gid_File_Dl_Rmcxt - TXT_FILE_BODY; - Dir = SCP2_URE_DL_DIR; - Name = SCP2_URE_DL_VER("rmcxt", "3"); - Styles = (PACKED, VERSION_INDEPENDENT_COMP_ID); - // CompID = "E0C091E3-7C18-4C32-B9CF-4D95AC243801"; -End - File gid_File_Dl_Store TXT_FILE_BODY; Dir = SCP2_URE_DL_DIR; @@ -390,14 +382,6 @@ Shortcut gid_Shortcut_Dl_JavaUno End #endif -File gid_File_Dl_UrpUno - TXT_FILE_BODY; - Dir = SCP2_URE_DL_DIR; - Name = SCP2_URE_DL_NORMAL("urp_uno"); - Styles = (PACKED, VERSION_INDEPENDENT_COMP_ID); - // CompID = "D9F647ED-8E6F-4F80-8D2B-A45372B6AB60"; -End - File gid_File_Dl_UnsafeUnoUno TXT_FILE_BODY; Dir = SCP2_URE_DL_DIR; @@ -678,20 +662,19 @@ File gid_File_Dl_Acceptor // CompID = "31183C51-C9A4-4D7A-A2F4-103252E1FEB0"; End -File gid_File_Dl_Bootstrap +File gid_File_Dl_Binaryurp TXT_FILE_BODY; Dir = SCP2_URE_DL_DIR; - Name = SCP2_URE_DL_BARE("bootstrap.uno"); - Styles = (PACKED, VERSION_INDEPENDENT_COMP_ID); - // CompID = "2620B307-25DB-498F-B2B8-46D928165331"; + Name = SCP2_URE_DL_BARE("binaryurp.uno"); + Styles = (PACKED); End -File gid_File_Dl_Bridgefac +File gid_File_Dl_Bootstrap TXT_FILE_BODY; Dir = SCP2_URE_DL_DIR; - Name = SCP2_URE_DL_BARE("bridgefac.uno"); + Name = SCP2_URE_DL_BARE("bootstrap.uno"); Styles = (PACKED, VERSION_INDEPENDENT_COMP_ID); - // CompID = "E025163F-FE1E-4E8C-B0E5-49C08924A646"; + // CompID = "2620B307-25DB-498F-B2B8-46D928165331"; End File gid_File_Dl_Connector @@ -779,14 +762,6 @@ File gid_File_Dl_Reflection // CompID = "601C7946-CFEB-4F56-9429-6D5963188DF3"; End -File gid_File_Dl_Remotebridge - TXT_FILE_BODY; - Dir = SCP2_URE_DL_DIR; - Name = SCP2_URE_DL_BARE("remotebridge.uno"); - Styles = (PACKED, VERSION_INDEPENDENT_COMP_ID); - // CompID = "B440B28E-B7AD-40C7-89E1-1508CA798347"; -End - File gid_File_Dl_Streams TXT_FILE_BODY; Dir = SCP2_URE_DL_DIR; @@ -1131,7 +1106,6 @@ Module gid_Module_Root_Ure_Hidden gid_File_Dl_Salhelper, gid_File_Dl_Profile_Uno, gid_File_Dl_Reg, - gid_File_Dl_Rmcxt, gid_File_Dl_Store, gid_File_Dl_Xmlreader, gid_File_Dl_Jvmaccess, @@ -1141,7 +1115,6 @@ Module gid_Module_Root_Ure_Hidden gid_File_Dl_Profile_Jvmfwk3rc, gid_File_Dl_ComnameUno, gid_File_Dl_JavaUno, - gid_File_Dl_UrpUno, gid_File_Dl_UnsafeUnoUno, gid_File_Dl_AffineUnoUno, gid_File_Dl_LogUnoUno, @@ -1150,8 +1123,8 @@ Module gid_Module_Root_Ure_Hidden gid_File_Dl_Juh, gid_File_Dl_Juhx, gid_File_Dl_Acceptor, + gid_File_Dl_Binaryurp, gid_File_Dl_Bootstrap, - gid_File_Dl_Bridgefac, gid_File_Dl_Connector, gid_File_Dl_Introspection, gid_File_Dl_Invocadapt, @@ -1161,7 +1134,6 @@ Module gid_Module_Root_Ure_Hidden gid_File_Dl_Namingservice, gid_File_Dl_Proxyfac, gid_File_Dl_Reflection, - gid_File_Dl_Remotebridge, gid_File_Dl_Stocservices, gid_File_Dl_Streams, gid_File_Dl_Textinstream, diff --git a/set_soenv.in b/set_soenv.in index d10cdfab8da3..793951eb8a4c 100644 --- a/set_soenv.in +++ b/set_soenv.in @@ -78,7 +78,7 @@ my ( $USR, $ETC, $BIN, $LIB, $LIB64, $INC, $INCLUDE, $DEV, $OPT, $LOCAL, $SOLENV # Environment variables. my ( $oldPATH, $SRC_ROOT, $SO_HOME, $JAVA_HOME, $JDK, $JAVAFLAGS, $OOO_SHELL, - $UPD, $WORK_STAMP, $SOURCE_ROOT_DIR , + $UPD, $WORK_STAMP, $SOURCE_ROOT_DIR , $gb_REPOS, $SOLARSRC, $DEVROOT, $SOLARVER, $SOLARVERSION, $WORKDIR, $OUTDIR, $SOLARENV, $STAR_INIROOT, $STAR_INIROOTOLD, $STAR_STANDLST, $STAR_SSCOMMON, $STAR_SSOLARINI, $DMAKEROOT, $CLASSPATH, $XCLASSPATH, $COMPATH, @@ -967,7 +967,7 @@ $XINC = PathFormat('@XINC@'); # X11 includes # Mac OS X/Darwin only variables. if ( $platform =~ m/darwin/ ) -{ $FRAMEWORKSHOME = $ds."System".$ds."Library".$ds."Frameworks"; +{ $FRAMEWORKSHOME = $ds."Developer".$ds."SDKs".$ds."MacOSX10.4u.sdk".$ds."System".$ds."Library".$ds."Frameworks"; if ( $XLIB eq "no_x_libraries" ) { $GUIBASE = "aqua"; } else { @@ -1496,6 +1496,14 @@ else # print "done\n"; +$gb_REPOS = $SRC_ROOT; +my $BUILD_TYPE = "@BUILD_TYPE@"; + +if ('@WITH_LANG@' ne "") +{ + $gb_REPOS .= " ".$SOURCE_ROOT_DIR."/l10n"; + $BUILD_TYPE = "@BUILD_TYPE@ L10N"; +} # # F. Setting the different aliases. @@ -1604,6 +1612,7 @@ ToFile( "EXTERNAL_WARNINGS_NOT_ERRORS", "TRUE", "e" ); ToFile( "PRODUCT", "@PRODUCT@", "e" ); ToFile( "PROFULLSWITCH", "@PROFULLSWITCH@", "e" ); ToFile( "PROEXT", $PROEXT, "e" ); +ToFile( "VALGRIND_CFLAGS", "@VALGRIND_CFLAGS@", "e" ); ToFile( "UNIXWRAPPERNAME", "@UNIXWRAPPERNAME@","e" ); ToFile( "BUILD_MOZAB", "@BUILD_MOZAB@", "e" ); ToFile( "PREBUILD_MOZAB", $PREBUILD_MOZAB, "e" ); @@ -1831,7 +1840,7 @@ ToFile( "WITH_FONTS", "@WITH_FONTS@", "e" ); ToFile( "WITHOUT_AFMS", "@WITHOUT_AFMS@", "e" ); ToFile( "WITHOUT_PPDS", "@WITHOUT_PPDS@", "e" ); ToFile( "WITH_BINFILTER", "@WITH_BINFILTER@", "e" ); -ToFile( "BUILD_TYPE", "@BUILD_TYPE@", "e" ); +ToFile( "BUILD_TYPE", "$BUILD_TYPE", "e" ); ToFile( "VERBOSE", "@VERBOSE@", "e" ); ToFile( "ENABLE_EVOAB2", "@ENABLE_EVOAB2@", "e" ); ToFile( "GOBJECT_CFLAGS", "@GOBJECT_CFLAGS@", "e" ); @@ -1855,6 +1864,9 @@ if ($SYSTEM_PYTHON eq "NO") { ToFile( "HOME", "@HOME@", "e" ); } ToFile( "SYSTEM_ICU", "@SYSTEM_ICU@", "e" ); +ToFile( "ICU_MAJOR", "@ICU_MAJOR@", "e" ); +ToFile( "ICU_MINOR", "@ICU_MINOR@", "e" ); +ToFile( "ICU_MICRO", "@ICU_MICRO@", "e" ); ToFile( "SYSTEM_GENBRK", "@SYSTEM_GENBRK@", "e" ); ToFile( "SYSTEM_GENCCODE", "@SYSTEM_GENCCODE@", "e" ); ToFile( "SYSTEM_GENCMN", "@SYSTEM_GENCMN@", "e" ); @@ -1962,6 +1974,8 @@ if ($platform !~ m/cygwin|os2/) { } ToFile( "SOLARSRC", $SOLARSRC, "e" ); ToFile( "SOURCE_ROOT_DIR", $SOURCE_ROOT_DIR, "e" ); +ToFile( "gb_REPOS", $gb_REPOS, "e" ); + if ( $platform =~ m/cygwin/ ) { ToFile( "ILIB", $ILIB, "e" ); @@ -2053,7 +2067,6 @@ if ($platform =~ m/os2/) ToFile( "SWITCHAR", "-", "e"); } ToFile( "SAL_ENABLE_FILE_LOCKING", "1", "e"); -ToFile( "DBGSV_INIT", "$SOLARENV/bin/dbgsv.ini", "e"); # # Writing unset variables you might not need to file. # diff --git a/solenv/bin/build.pl b/solenv/bin/build.pl index ed9dcc3721e6..d7e4ecb781ff 100755 --- a/solenv/bin/build.pl +++ b/solenv/bin/build.pl @@ -2032,6 +2032,10 @@ sub do_custom_job { $error_code = run_job($job, $module_paths{$module}, $module_job); }; }; + if ($error_code && $ignore) { + push(@ignored_errors, $module_job); + $error_code = 0; + }; if ($error_code) { $modules_with_errors{$dependencies_hash}++; # $broken_build{$module_job} = $error_code; @@ -2237,7 +2241,7 @@ sub retrieve_build_list { my $old_fh = select(STDOUT); # Try to get global depencies from solver's build.lst if such exists - my $solver_inc_dir = "$ENV{SOLARVER}/common"; + my $solver_inc_dir = "$ENV{SOLARVER}/$ENV{OUTPATH}"; $solver_inc_dir .= $ENV{PROEXT} if (defined $ENV{PROEXT}); $solver_inc_dir .= '/inc'; $solver_inc_dir .= $ENV{UPDMINOREXT} if (defined $ENV{UPDMINOREXT}); @@ -2245,20 +2249,16 @@ sub retrieve_build_list { $solver_inc_dir = correct_path($solver_inc_dir); $dead_parents{$module}++; print "Fetching dependencies for module $module from solver..."; - foreach (@possible_build_lists) { - my $possible_build_lst = "$solver_inc_dir/$_"; - if (-e $possible_build_lst) { + foreach my $onelist (@possible_build_lists) { + my $build_list_candidate = "$solver_inc_dir/$onelist"; + if (-e $build_list_candidate) { print " ok\n"; select($old_fh); - return $possible_build_lst; + return $build_list_candidate; }; } - print " failed\n"; - - if (!defined $dead_parents{$module}) { - print "WARNING: Cannot figure out CWS for $module. Forgot to set CWS?\n"; - } - select($old_fh); + print(" failed\n"); + print_error("incomplete dependencies!\n"); return undef; }; diff --git a/solenv/bin/cws.pl b/solenv/bin/cws.pl index bf9ce9508d38..62a6b2763761 100644 --- a/solenv/bin/cws.pl +++ b/solenv/bin/cws.pl @@ -75,7 +75,7 @@ my %valid_options_hash = ( 'help' => ['help'], 'create' => ['help', 'milestone', 'migration', 'hg'], 'fetch' => ['help', 'milestone', 'childworkspace','platforms','noautocommon', - 'quiet', 'onlysolver'], + 'quiet', 'onlysolver', 'additionalrepositories'], 'query' => ['help', 'milestone','masterworkspace','childworkspace'], 'task' => ['help'], 'setcurrent' => ['help', 'milestone'], @@ -120,6 +120,7 @@ sub parse_command_line 'profile', 'commit|C', 'platforms|p=s', + 'additionalrepositories|r=s', 'noautocommon|x=s', 'onlysolver|o', 'quiet|q', @@ -399,20 +400,16 @@ sub hg_clone_cws_or_milestone my ($hg_local_source, $hg_lan_source, $hg_remote_source); my $config = CwsConfig->new(); - if ( $rep_type eq 'ooo') { - $hg_local_source = $config->get_ooo_hg_local_source(); - $hg_lan_source = $config->get_ooo_hg_lan_source(); - $hg_remote_source = $config->get_ooo_hg_remote_source(); - } - else { - $hg_local_source = $config->get_so_hg_local_source(); - $hg_lan_source = $config->get_so_hg_lan_source(); - $hg_remote_source = $config->get_so_hg_remote_source(); - } + + $hg_local_source = $config->get_hg_source(uc $rep_type, 'LOCAL'); + $hg_lan_source = $config->get_hg_source(uc $rep_type, 'LAN'); + $hg_remote_source = $config->get_hg_source(uc $rep_type, 'REMOTE'); my $masterws = $cws->master(); - my $master_local_source = "$hg_local_source/" . $masterws; - my $master_lan_source = "$hg_lan_source/" . $masterws; + my ($master_local_source, $master_lan_source); + + $master_local_source = "$hg_local_source/" . $masterws; + $master_lan_source = "$hg_lan_source/" . $masterws; my $milestone_tag; if ( $clone_milestone_only ) { @@ -434,7 +431,15 @@ sub hg_clone_cws_or_milestone my $pull_from_remote = 0; my $cws_remote_source; if ( !$clone_milestone_only ) { - $cws_remote_source = "$hg_remote_source/cws/" . $cws->child(); + if ($rep_type eq "ooo" || $rep_type eq "so") + { + $cws_remote_source = "$hg_remote_source/cws/" . $cws->child(); + } + # e.g. cws_l10n + else + { + $cws_remote_source = "$hg_remote_source/cws_".$rep_type."/" . $cws->child(); + } # The outgoing repository might not yet be available. Which is not # an error. Since pulling from the cws outgoing URL results in an ugly @@ -446,7 +451,8 @@ sub hg_clone_cws_or_milestone require LWP::Simple; my $content = LWP::Simple::get($cws_remote_source); my $pattern = "<title>cws/". $cws->child(); - if ( $content && $content =~ /$pattern/ ) { + my $pattern2 = "<title>cws_".$rep_type."/". $cws->child(); + if ( $content && ($content =~ /$pattern/ || $content =~ /$pattern2/) ) { $pull_from_remote = 1; } else { @@ -1456,10 +1462,10 @@ sub do_help } elsif ($arg eq 'fetch') { print STDERR "fetch: fetch a milestone or CWS\n"; - print STDERR "usage: fetch [-q] [-p platforms] [-o] <-m milestone> <workspace>\n"; - print STDERR "usage: fetch [-q] [-p platforms] [-o] <-c cws> <workspace>\n"; - print STDERR "usage: fetch [-q] [-x platforms] [-o] <-m milestone> <workspace>\n"; - print STDERR "usage: fetch [-q] [-x platforms] [-o] <-c cws> <workspace>\n"; + print STDERR "usage: fetch [-q] [-p platforms] [-r additionalrepositories] [-o] <-m milestone> <workspace>\n"; + print STDERR "usage: fetch [-q] [-p platforms] [-r additionalrepositories] [-o] <-c cws> <workspace>\n"; + print STDERR "usage: fetch [-q] [-x platforms] [-r additionalrepositories] [-o] <-m milestone> <workspace>\n"; + print STDERR "usage: fetch [-q] [-x platforms] [-r additionalrepositories] [-o] <-c cws> <workspace>\n"; print STDERR "usage: fetch [-q] <-m milestone> <workspace>\n"; print STDERR "usage: fetch [-q] <-c cws> <workspace>\n"; print STDERR "\t-m milestone: Checkout milestone <milestone> to workspace <workspace>\n"; @@ -1475,6 +1481,8 @@ sub do_help print STDERR "\t-x platform: Copy one or more prebuilt platforms 'platform'. \n"; print STDERR "\t Separate multiple platforms with commas.\n"; print STDERR "\t Does not automatically adds 'common[.pro]'.\n"; + print STDERR "\t-r additionalrepositories Checkout additional repositories. \n"; + print STDERR "\t Separate multiple repositories with commas.\n"; print STDERR "\t--noautocommon platform: Same as -x\n"; print STDERR "\t-o: Omit checkout of sources, copy only solver. \n"; print STDERR "\t--onlysolver: Same as -o\n"; @@ -1582,6 +1590,8 @@ sub do_fetch } my $milestone_opt = $options_ref->{'milestone'}; + my $additional_repositories_opt = $options_ref->{'additionalrepositories'}; + $additional_repositories_opt = "", if ( !defined $additional_repositories_opt ); my $child = $options_ref->{'childworkspace'}; my $platforms = $options_ref->{'platforms'}; my $noautocommon = $options_ref->{'noautocommon'}; @@ -1718,8 +1728,23 @@ sub do_fetch if ( !mkdir($work_master) ) { print_error("Can't create directory '$work_master': $!.", 8); } + + my %unique = map { $_ => 1 } split( /,/ , $additional_repositories_opt); + my @unique_repo_list = keys %unique; + + if (defined($additional_repositories_opt)) + { + foreach my $repo(@unique_repo_list) + { + # do not double clone ooo and sun + hg_clone_cws_or_milestone($repo, $cws, "$work_master/".$repo, $clone_milestone_only), if $repo ne "ooo" && $repo ne "sun"; + } + + } + hg_clone_cws_or_milestone('ooo', $cws, "$work_master/ooo", $clone_milestone_only); hg_clone_cws_or_milestone('so', $cws, "$work_master/sun", $clone_milestone_only); + if ( get_source_config_for_milestone($masterws, $milestone) ) { # write source_config file my $source_config_file = "$work_master/source_config"; @@ -1729,6 +1754,10 @@ sub do_fetch print SOURCE_CONFIG "[repositories]\n"; print SOURCE_CONFIG "ooo=active\n"; print SOURCE_CONFIG "sun=active\n"; + foreach my $repo(@unique_repo_list) + { + print SOURCE_CONFIG $repo."=active\n", if $repo ne "ooo" || $repo ne "sun"; + } close(SOURCE_CONFIG); } else { diff --git a/solenv/bin/make_installer.pl b/solenv/bin/make_installer.pl index d28a2e7e3fa0..c85aaffcde07 100644 --- a/solenv/bin/make_installer.pl +++ b/solenv/bin/make_installer.pl @@ -1955,7 +1955,7 @@ for ( my $n = 0; $n <= $#installer::globals::languageproducts; $n++ ) installer::windows::registry::create_registry_table($registryitemsinproductlanguageresolvedarrayref, \@allregistrycomponents, $newidtdir, $languagesarrayref, $allvariableshashref); if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "registryitems4.log", $registryitemsinproductlanguageresolvedarrayref); } - installer::windows::component::create_component_table($filesinproductlanguageresolvedarrayref, $registryitemsinproductlanguageresolvedarrayref, $directoriesforepmarrayref, \@allfilecomponents, \@allregistrycomponents, $newidtdir, $componentid, $componentidkeypath); + installer::windows::component::create_component_table($filesinproductlanguageresolvedarrayref, $registryitemsinproductlanguageresolvedarrayref, $directoriesforepmarrayref, \@allfilecomponents, \@allregistrycomponents, $newidtdir, $componentid, $componentidkeypath, $allvariableshashref); if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "productfiles19.log", $filesinproductlanguageresolvedarrayref); } if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "registryitems5.log", $registryitemsinproductlanguageresolvedarrayref); } @@ -2166,6 +2166,7 @@ for ( my $n = 0; $n <= $#installer::globals::languageproducts; $n++ ) installer::logger::print_message( "... creating msi database (language $onelanguage) ... \n" ); installer::windows::msiglobal::set_uuid_into_component_table($languageidtdir, $allvariableshashref); # setting new GUID for the components using the tool uuidgen.exe + installer::windows::msiglobal::prepare_64bit_database($languageidtdir, $allvariableshashref); # making last 64 bit changes installer::windows::msiglobal::create_msi_database($languageidtdir ,$msifilename); # validating the database # ToDo diff --git a/solenv/bin/modules/CwsConfig.pm b/solenv/bin/modules/CwsConfig.pm index 6121691e1e7f..1ba12fecac1d 100644 --- a/solenv/bin/modules/CwsConfig.pm +++ b/solenv/bin/modules/CwsConfig.pm @@ -343,94 +343,59 @@ sub get_so_svn_server #### HG methods #### -sub get_ooo_hg_local_source +sub _get_hg_source { - my $self = shift; - - if ( !defined($self->{HG_LOCAL_SOURCE}) ) { + my $self = shift; + my $repository_source = shift; + if ( !defined($self->{$repository_source}) ) { my $config_file = $self->get_config_file(); - my $source = $config_file->{CWS_CONFIG}->{'HG_LOCAL_SOURCE'}; + my $source = $config_file->{CWS_CONFIG}->{$repository_source}; if ( !defined($source) ) { $source = ""; } - $self->{HG_LOCAL_SOURCE} = $source; + $self->{$repository_source} = $source; } - return $self->{HG_LOCAL_SOURCE} ? $self->{HG_LOCAL_SOURCE} : undef; -} - -sub get_ooo_hg_lan_source -{ - my $self = shift; + return $self->{$repository_source} ? $self->{$repository_source} : undef; - if ( !defined($self->{HG_LAN_SOURCE}) ) { - my $config_file = $self->get_config_file(); - my $source = $config_file->{CWS_CONFIG}->{'HG_LAN_SOURCE'}; - if ( !defined($source) ) { - $source = ""; - } - $self->{HG_LAN_SOURCE} = $source; - } - return $self->{HG_LAN_SOURCE} ? $self->{HG_LAN_SOURCE} : undef; } -sub get_ooo_hg_remote_source +sub get_hg_source { - my $self = shift; + my $self = shift; + my $repository = shift; + my $location = shift; - if ( !defined($self->{HG_REMOTE_SOURCE}) ) { - my $config_file = $self->get_config_file(); - my $source = $config_file->{CWS_CONFIG}->{'HG_REMOTE_SOURCE'}; - if ( !defined($source) ) { - $source = ""; + #Special prefix handling, see cwsrc + if ($repository eq "OOO") + { + if ($location eq "LOCAL") + { + return $self->_get_hg_source('HG_LOCAL_SOURCE'); } - $self->{HG_REMOTE_SOURCE} = $source; - } - return $self->{HG_REMOTE_SOURCE} ? $self->{HG_REMOTE_SOURCE} : undef; -} - -sub get_so_hg_local_source -{ - my $self = shift; - - if ( !defined($self->{SO_HG_LOCAL_SOURCE}) ) { - my $config_file = $self->get_config_file(); - my $source = $config_file->{CWS_CONFIG}->{'SO_HG_LOCAL_SOURCE'}; - if ( !defined($source) ) { - $source = ""; + elsif ($location eq "LAN") + { + return $self->_get_hg_source('HG_LAN_SOURCE'); } - $self->{SO_HG_LOCAL_SOURCE} = $source; - } - return $self->{SO_HG_LOCAL_SOURCE} ? $self->{SO_HG_LOCAL_SOURCE} : undef; -} - -sub get_so_hg_lan_source -{ - my $self = shift; - - if ( !defined($self->{SO_HG_LAN_SOURCE}) ) { - my $config_file = $self->get_config_file(); - my $source = $config_file->{CWS_CONFIG}->{'SO_HG_LAN_SOURCE'}; - if ( !defined($source) ) { - $source = ""; + elsif ($location eq "REMOTE") + { + return $self->_get_hg_source('HG_REMOTE_SOURCE'); } - $self->{SO_HG_LAN_SOURCE} = $source; } - return $self->{SO_HG_LAN_SOURCE} ? $self->{SO_HG_LAN_SOURCE} : undef; -} - -sub get_so_hg_remote_source -{ - my $self = shift; - - if ( !defined($self->{SO_HG_REMOTE_SOURCE}) ) { - my $config_file = $self->get_config_file(); - my $source = $config_file->{CWS_CONFIG}->{'SO_HG_REMOTE_SOURCE'}; - if ( !defined($source) ) { - $source = ""; + else + { + if ($location eq "LOCAL") + { + return $self->_get_hg_source($repository.'_HG_LOCAL_SOURCE'); + } + elsif ($location eq "LAN") + { + return $self->_get_hg_source($repository.'_HG_LAN_SOURCE'); + } + elsif ($location eq "REMOTE") + { + return $self->_get_hg_source($repository.'_HG_REMOTE_SOURCE'); } - $self->{SO_HG_REMOTE_SOURCE} = $source; } - return $self->{SO_HG_REMOTE_SOURCE} ? $self->{SO_HG_REMOTE_SOURCE} : undef; } #### Prebuild binaries configuration #### diff --git a/solenv/bin/modules/installer/epmfile.pm b/solenv/bin/modules/installer/epmfile.pm index 8b828b85335f..119eb95e0b7c 100644 --- a/solenv/bin/modules/installer/epmfile.pm +++ b/solenv/bin/modules/installer/epmfile.pm @@ -1060,7 +1060,7 @@ sub set_revision_in_pkginfo my $pkgversion = "SOLSPARCPKGVERSION"; if ( $installer::globals::issolarisx86build ) { $pkgversion = "SOLIAPKGVERSION"; } - if (( $variables->{$pkgversion} ) && ( $variables->{$pkgversion} ne "" )) + if (( $variables->{$pkgversion} ) && ( $variables->{$pkgversion} ne "" )) { if ( $variables->{$pkgversion} ne "FINALVERSION" ) { @@ -1085,7 +1085,15 @@ sub set_revision_in_pkginfo $version = "$finalmajor.$finalminor.$finalmicro"; } - my $versionstring = "$version,$variables->{$pkgversion}"; + my $datestring = $variables->{$pkgversion}; + + # Allowing some packages to have another date of creation. + # They can be defined in product definition using a key like "SOLSPARCPKGVERSION_$packagename" + + my $additionalkey = $pkgversion . "_" . $packagename; + if (( $variables->{$additionalkey} ) && ( $variables->{$additionalkey} ne "" )) { $datestring = $variables->{$additionalkey}; } + + my $versionstring = "$version,$datestring"; for ( my $i = 0; $i <= $#{$file}; $i++ ) { diff --git a/solenv/bin/modules/installer/globals.pm b/solenv/bin/modules/installer/globals.pm index 144cf4c88a4b..41df76644874 100644 --- a/solenv/bin/modules/installer/globals.pm +++ b/solenv/bin/modules/installer/globals.pm @@ -43,6 +43,7 @@ BEGIN "km", "nr", "ns", + "nso", "rw", "ss", "st", @@ -87,7 +88,13 @@ BEGIN "oc", "ml", "as", - "ast" + "ast", + "ht", + "jbo", + "fur", + "ny", + "so", + "kab" ); @items_at_modules = ("Files", "Dirs", "Unixlinks"); @asianlanguages = ("ja", "ko", "zh-CN", "zh-TW"); @@ -374,6 +381,10 @@ BEGIN %spellcheckerlanguagehash = (); %spellcheckerfilehash = (); $registryrootcomponent = ""; + %allcomponents = (); + %allcomponents_in_this_database = (); + %allshortcomponents = (); + %alluniquedirectorynames = (); $installlocationdirectory = ""; $installlocationdirectoryset = 0; diff --git a/solenv/bin/modules/installer/simplepackage.pm b/solenv/bin/modules/installer/simplepackage.pm index d76b81a55850..1f392f4f6c86 100644..100755 --- a/solenv/bin/modules/installer/simplepackage.pm +++ b/solenv/bin/modules/installer/simplepackage.pm @@ -127,25 +127,7 @@ sub register_extensions if ( ! -f $unopkgfile ) { installer::exiter::exit_program("ERROR: $unopkgfile not found!", "register_extensions"); } - my $localtemppath = installer::systemactions::create_directories("uno", $languagestringref); - - my $slash = ""; - - if ( $installer::globals::iswindowsbuild ) - { - if ( $^O =~ /cygwin/i ) - { - $localtemppath = $installer::globals::cyg_temppath; - $preregdir = qx{cygpath -m "$preregdir"}; - chomp($preregdir); - } - $localtemppath =~ s/\\/\//g; - $slash = "/"; # Third slash for Windows. Other OS pathes already start with "/" - } - - $preregdir =~ s/\/\s*$//g; - - my $systemcall = $unopkgfile . " sync --verbose -env:BUNDLED_EXTENSIONS_USER=\"file://" . $slash . $preregdir . "\"" . " -env:UserInstallation=file://" . $slash . $localtemppath . " -env:UNO_JAVA_JFW_ENV_JREHOME=true 2\>\&1 |"; + my $systemcall = $unopkgfile . " sync --verbose" . " -env:UNO_JAVA_JFW_ENV_JREHOME=true 2\>\&1 |"; print "... $systemcall ...\n"; @@ -705,6 +687,7 @@ sub create_simple_package if (( $onefile->{'Styles'} ) && ( $onefile->{'Styles'} =~ /\bBINARYTABLE_ONLY\b/ )) { next; } if (( $installer::globals::patch ) && ( $onefile->{'Styles'} ) && ( ! ( $onefile->{'Styles'} =~ /\bPATCH\b/ ))) { next; } + if (( $installer::globals::patch ) && ( $installer::globals::packageformat eq "dmg" )) { push(@installer::globals::patchfilecollector, "$onefile->{'destination'}\n"); } my $source = $onefile->{'sourcepath'}; my $destination = $onefile->{'destination'}; diff --git a/solenv/bin/modules/installer/windows/component.pm b/solenv/bin/modules/installer/windows/component.pm index 38989858a4b6..4ab5aac68954 100644 --- a/solenv/bin/modules/installer/windows/component.pm +++ b/solenv/bin/modules/installer/windows/component.pm @@ -193,7 +193,7 @@ sub get_registry_component_directory sub get_file_component_attributes { - my ($componentname, $filesref) = @_; + my ($componentname, $filesref, $allvariables) = @_; my $attributes; @@ -240,6 +240,9 @@ sub get_file_component_attributes $attributes = 4; # Files in shellnew dir and in non advertised startmenu entries must have user registry key as KeyPath } + # Adding 256, if this is a 64 bit installation set. + if (( $allvariables->{'64BITPRODUCT'} ) && ( $allvariables->{'64BITPRODUCT'} == 1 )) { $attributes = $attributes + 256; } + return $attributes } @@ -251,12 +254,15 @@ sub get_file_component_attributes sub get_registry_component_attributes { - my ($componentname) = @_; + my ($componentname, $allvariables) = @_; my $attributes; $attributes = 4; + # Adding 256, if this is a 64 bit installation set. + if (( $allvariables->{'64BITPRODUCT'} ) && ( $allvariables->{'64BITPRODUCT'} == 1 )) { $attributes = $attributes + 256; } + if ( exists($installer::globals::dontdeletecomponents{$componentname}) ) { $attributes = $attributes + 16; } return $attributes @@ -381,7 +387,7 @@ sub get_component_keypath sub create_component_table { - my ($filesref, $registryref, $dirref, $allfilecomponentsref, $allregistrycomponents, $basedir, $componentidhashref, $componentidkeypathhashref) = @_; + my ($filesref, $registryref, $dirref, $allfilecomponentsref, $allregistrycomponents, $basedir, $componentidhashref, $componentidkeypathhashref, $allvariables) = @_; my @componenttable = (); @@ -402,7 +408,7 @@ sub create_component_table $onecomponent{'guid'} = get_component_guid($onecomponent{'name'}, $componentidhashref); $onecomponent{'directory'} = get_file_component_directory($onecomponent{'name'}, $filesref, $dirref); if ( $onecomponent{'directory'} eq "IGNORE_COMP" ) { next; } - $onecomponent{'attributes'} = get_file_component_attributes($onecomponent{'name'}, $filesref); + $onecomponent{'attributes'} = get_file_component_attributes($onecomponent{'name'}, $filesref, $allvariables); $onecomponent{'condition'} = get_file_component_condition($onecomponent{'name'}, $filesref); $onecomponent{'keypath'} = get_component_keypath($onecomponent{'name'}, $filesref, $componentidkeypathhashref); @@ -421,7 +427,7 @@ sub create_component_table $onecomponent{'name'} = ${$allregistrycomponents}[$i]; $onecomponent{'guid'} = get_component_guid($onecomponent{'name'}, $componentidhashref); $onecomponent{'directory'} = get_registry_component_directory(); - $onecomponent{'attributes'} = get_registry_component_attributes($onecomponent{'name'}); + $onecomponent{'attributes'} = get_registry_component_attributes($onecomponent{'name'}, $allvariables); $onecomponent{'condition'} = get_component_condition($onecomponent{'name'}); $onecomponent{'keypath'} = get_component_keypath($onecomponent{'name'}, $registryref, $componentidkeypathhashref); diff --git a/solenv/bin/modules/installer/windows/directory.pm b/solenv/bin/modules/installer/windows/directory.pm index ba6f9a3b75bd..f7b13747e3bf 100644 --- a/solenv/bin/modules/installer/windows/directory.pm +++ b/solenv/bin/modules/installer/windows/directory.pm @@ -77,19 +77,78 @@ sub overwrite_programfilesfolder } ############################################################## +# Maximum length of directory name is 72. +# Taking care of underlines, which are the separator. +############################################################## + +sub make_short_dir_version +{ + my ($longstring, $length, $displayname) = @_; + + my $shortstring = ""; + my $infoline = ""; + my $savestring = $longstring; + + # Splitting the string at each "underline" and allowing only $length characters per directory name. + # Checking also uniqueness and length. + + my $stringarray = installer::converter::convert_stringlist_into_array_without_newline(\$longstring, "_"); + + foreach my $onestring ( @{$stringarray} ) + { + my $partstring = ""; + + if ( $onestring =~ /\-/ ) + { + my $localstringarray = installer::converter::convert_stringlist_into_array_without_newline(\$onestring, "-"); + foreach my $onelocalstring ( @{$localstringarray} ) + { + if ( length($onelocalstring) > $length ) { $onelocalstring = substr($onelocalstring, 0, $length); } + $partstring = $partstring . "-" . $onelocalstring; + } + $partstring =~ s/^\s*\-//; + } + else + { + if ( length($onestring) > $length ) { $partstring = substr($onestring, 0, $length); } + else { $partstring = $onestring; } + } + + $shortstring = $shortstring . "_" . $partstring; + } + + $shortstring =~ s/^\s*\_//; + + if ( length($shortstring) > 72 ) + { + my $shortlength = length($shortstring); + $infoline = "WARNING: Failed to create unique directory name with less than 72 characters: \"$displayname\" ($shortstring ($shortlength)).\n"; + push(@installer::globals::logfileinfo, $infoline); + } + + return $shortstring; +} + +############################################################## # Adding unique directory names to the directory collection ############################################################## sub create_unique_directorynames { - my ($directoryref) = @_; + my ($directoryref, $allvariables) = @_; $installer::globals::officeinstalldirectoryset = 0; + my %conversionhash = (); + my $infoline = ""; + my $errorcount = 0; + for ( my $i = 0; $i <= $#{$directoryref}; $i++ ) { my $onedir = ${$directoryref}[$i]; - my $uniquename = $onedir->{'HostName'}; + my $hostname = $onedir->{'HostName'}; + + my $uniquename = $hostname; my $styles = ""; if ( $onedir->{'Styles'} ) { $styles = $onedir->{'Styles'}; } # get_path_from_fullqualifiedname(\$uniqueparentname); @@ -101,6 +160,42 @@ sub create_unique_directorynames $uniquename =~ s/\_//g; # removing existing underlines $uniquename =~ s/\.//g; # removing dots in directoryname $uniquename =~ s/\Q$installer::globals::separator\E/\_/g; # replacing slash and backslash with underline + $uniquename =~ s/OpenOffice/OO/g; + $uniquename =~ s/_registry/_rgy/g; + $uniquename =~ s/_registration/_rgn/g; + $uniquename =~ s/_extension/_ext/g; + $uniquename =~ s/_frame/_frm/g; + $uniquename =~ s/_table/_tbl/g; + $uniquename =~ s/_chart/_crt/g; + + my $startlength = 5; + + if ( ! $allvariables->{'NOSHORTDIRECTORYNAMES'} ) + { + # This process does not work for SDK, because of its long and similar pathes + $uniquename = make_short_dir_version($uniquename, $startlength, $hostname); # taking care of underlines! + } + + if ( exists($installer::globals::alluniquedirectorynames{$uniquename}) ) + { + # This is an error, that must stop the packaging process + $errorcount++; + + $infoline = "$errorcount: Already existing unique directory: $uniquename\n"; + push( @installer::globals::logfileinfo, $infoline); + $infoline = "$errorcount: First full directory: $conversionhash{$uniquename}\n"; + push( @installer::globals::logfileinfo, $infoline); + $infoline = "$errorcount: Current full directory: $hostname\n"; + push( @installer::globals::logfileinfo, $infoline); + } + + $conversionhash{$uniquename} = $hostname; + + $installer::globals::alluniquedirectorynames{$uniquename} = 1; + + # Important: The unique parent is generated from the string $uniquename. Therefore counters + # like adding "_1" is not allowed to achive uniqueness, because this depends from other directories + # and does not deliver always the same result. my $uniqueparentname = $uniquename; @@ -147,6 +242,11 @@ sub create_unique_directorynames $installer::globals::vendordirectoryset = 1; } } + + if ( $errorcount > 0 ) + { + installer::exiter::exit_program("ERROR: Failed to create unique directory names.", "create_unique_directorynames"); + } } ##################################################### @@ -434,8 +534,9 @@ sub create_directory_table my $infoline; overwrite_programfilesfolder($allvariableshashref); - create_unique_directorynames($directoryref); if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_1.log", $directoryref); } + create_unique_directorynames($directoryref, $allvariableshashref); + if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_1a.log", $directoryref); } create_defaultdir_directorynames($directoryref, $shortdirnamehashref); # only destdir! if ( $installer::globals::globallogging ) { installer::files::save_array_of_hashes($loggingdir . "directoriesforidt_local_2.log", $directoryref); } set_installlocation_directory($directoryref, $allvariableshashref); diff --git a/solenv/bin/modules/installer/windows/file.pm b/solenv/bin/modules/installer/windows/file.pm index 10666be7460c..b679d8b46e2b 100644 --- a/solenv/bin/modules/installer/windows/file.pm +++ b/solenv/bin/modules/installer/windows/file.pm @@ -170,6 +170,40 @@ sub assign_sequencenumbers_to_files } } +######################################################### +# Create a shorter version of a long component name, +# because maximum length in msi database is 72. +# Attention: In multi msi installation sets, the short +# names have to be unique over all packages, because +# this string is used to create the globally unique id +# -> no resetting of +# %installer::globals::allshortcomponents +# after a package was created. +######################################################### + +sub generate_new_short_componentname +{ + my ($componentname) = @_; + + my $shortcomponentname = ""; + my $counter = 1; + + my $startversion = substr($componentname, 0, 60); # taking only the first 60 characters + $startversion = $startversion . "_"; + + $shortcomponentname = $startversion . $counter; + + while ( exists($installer::globals::allshortcomponents{$shortcomponentname}) ) + { + $counter++; + $shortcomponentname = $startversion . $counter; + } + + $installer::globals::allshortcomponents{$shortcomponentname} = 1; + + return $shortcomponentname; +} + ############################################### # Generating the component name from a file ############################################### @@ -178,77 +212,139 @@ sub get_file_component_name { my ($fileref, $filesref) = @_; - # In this function exists the rule to create components from files - # Rule: - # Two files get the same componentid, if: - # both have the same destination directory. - # both have the same "gid" -> both were packed in the same zip file - # All other files are included into different components! - - # my $componentname = $fileref->{'gid'} . "_" . $fileref->{'Dir'}; - - # $fileref->{'Dir'} is not sufficient! All files in a zip file have the same $fileref->{'Dir'}, - # but can be in different subdirectories. - # Solution: destination=share\Scripts\beanshell\Capitalise\capitalise.bsh - # in which the filename (capitalise.bsh) has to be removed and all backslashes (slashes) are - # converted into underline. - - my $destination = $fileref->{'destination'}; - installer::pathanalyzer::get_path_from_fullqualifiedname(\$destination); - $destination =~ s/\s//g; - $destination =~ s/\\/\_/g; - $destination =~ s/\//\_/g; - $destination =~ s/\_\s*$//g; # removing ending underline - - my $componentname = $fileref->{'gid'} . "__" . $destination; - - # Files with different languages, need to be packed into different components. - # Then the installation of the language specific component is determined by a language condition. - - if ( $fileref->{'ismultilingual'} ) - { - my $officelanguage = $fileref->{'specificlanguage'}; - $componentname = $componentname . "_" . $officelanguage; - } - - $componentname = lc($componentname); # componentnames always lowercase - - $componentname =~ s/\-/\_/g; # converting "-" to "_" - $componentname =~ s/\./\_/g; # converting "-" to "_" - - # Attention: Maximum length for the componentname is 72 - - $componentname =~ s/gid_file_/g_f_/g; - $componentname =~ s/_extra_/_e_/g; - $componentname =~ s/_config_/_c_/g; - $componentname =~ s/_org_openoffice_/_o_o_/g; - $componentname =~ s/_program_/_p_/g; - $componentname =~ s/_typedetection_/_td_/g; - $componentname =~ s/_linguistic_/_l_/g; - $componentname =~ s/_module_/_m_/g; - $componentname =~ s/_optional_/_opt_/g; - $componentname =~ s/_packages/_pack/g; - $componentname =~ s/_menubar/_mb/g; - $componentname =~ s/_common_/_cm_/g; - $componentname =~ s/_export_/_exp_/g; - $componentname =~ s/_table_/_tb_/g; - $componentname =~ s/_sofficecfg_/_sc_/g; - $componentname =~ s/_startmodulecommands_/_smc_/g; - $componentname =~ s/_drawimpresscommands_/_dic_/g; - $componentname =~ s/_basiccommands_/_bac_/g; - $componentname =~ s/_basicidecommands_/_baic_/g; - $componentname =~ s/_genericcommands_/_genc_/g; - $componentname =~ s/_bibliographycommands_/_bibc_/g; - $componentname =~ s/_share_/_s_/g; - $componentname =~ s/_modules_/_ms_/g; - $componentname =~ s/_uiconfig_zip_/_ucz_/g; - $componentname =~ s/_soffice_cfg_/_sc_/g; - - # All this is not necessary for files, which have the flag ASSIGNCOMPOMENT + my $componentname = ""; + + # Special handling for files with ASSIGNCOMPOMENT my $styles = ""; if ( $fileref->{'Styles'} ) { $styles = $fileref->{'Styles'}; } - if ( $styles =~ /\bASSIGNCOMPOMENT\b/ ) { $componentname = get_component_from_assigned_file($fileref->{'AssignComponent'}, $filesref); } + if ( $styles =~ /\bASSIGNCOMPOMENT\b/ ) + { + $componentname = get_component_from_assigned_file($fileref->{'AssignComponent'}, $filesref); + } + else + { + # In this function exists the rule to create components from files + # Rule: + # Two files get the same componentid, if: + # both have the same destination directory. + # both have the same "gid" -> both were packed in the same zip file + # All other files are included into different components! + + # my $componentname = $fileref->{'gid'} . "_" . $fileref->{'Dir'}; + + # $fileref->{'Dir'} is not sufficient! All files in a zip file have the same $fileref->{'Dir'}, + # but can be in different subdirectories. + # Solution: destination=share\Scripts\beanshell\Capitalise\capitalise.bsh + # in which the filename (capitalise.bsh) has to be removed and all backslashes (slashes) are + # converted into underline. + + my $destination = $fileref->{'destination'}; + installer::pathanalyzer::get_path_from_fullqualifiedname(\$destination); + $destination =~ s/\s//g; + $destination =~ s/\\/\_/g; + $destination =~ s/\//\_/g; + $destination =~ s/\_\s*$//g; # removing ending underline + + $componentname = $fileref->{'gid'} . "__" . $destination; + + # Files with different languages, need to be packed into different components. + # Then the installation of the language specific component is determined by a language condition. + + if ( $fileref->{'ismultilingual'} ) + { + my $officelanguage = $fileref->{'specificlanguage'}; + $componentname = $componentname . "_" . $officelanguage; + } + + $componentname = lc($componentname); # componentnames always lowercase + + $componentname =~ s/\-/\_/g; # converting "-" to "_" + $componentname =~ s/\./\_/g; # converting "-" to "_" + + # Attention: Maximum length for the componentname is 72 + # %installer::globals::allcomponents_in_this_database : resetted for each database + # %installer::globals::allcomponents : not resetted for each database + # Component strings must be unique for the complete product, because they are used for + # the creation of the globally unique identifier. + + my $fullname = $componentname; # This can be longer than 72 + + if (( exists($installer::globals::allcomponents{$fullname}) ) && ( ! exists($installer::globals::allcomponents_in_this_database{$fullname}) )) + { + # This is not allowed: One component cannot be installed with different packages. + installer::exiter::exit_program("ERROR: Component \"$fullname\" is already included into another package. This is not allowed.", "get_file_component_name"); + } + + if ( exists($installer::globals::allcomponents{$fullname}) ) + { + $componentname = $installer::globals::allcomponents{$fullname}; + } + else + { + if ( length($componentname) > 72 ) + { + # Using md5sum needs much time + # chomp(my $shorter = `echo $componentname | md5sum | sed -e "s/ .*//g"`); + # $componentname = "comp_$shorter"; + $componentname = generate_new_short_componentname($componentname); # This has to be unique for the complete product, not only one package + } + + $installer::globals::allcomponents{$fullname} = $componentname; + $installer::globals::allcomponents_in_this_database{$fullname} = 1; + } + + # $componentname =~ s/gid_file_/g_f_/g; + # $componentname =~ s/_extra_/_e_/g; + # $componentname =~ s/_config_/_c_/g; + # $componentname =~ s/_org_openoffice_/_o_o_/g; + # $componentname =~ s/_program_/_p_/g; + # $componentname =~ s/_typedetection_/_td_/g; + # $componentname =~ s/_linguistic_/_l_/g; + # $componentname =~ s/_module_/_m_/g; + # $componentname =~ s/_optional_/_opt_/g; + # $componentname =~ s/_packages/_pack/g; + # $componentname =~ s/_menubar/_mb/g; + # $componentname =~ s/_common_/_cm_/g; + # $componentname =~ s/_export_/_exp_/g; + # $componentname =~ s/_table_/_tb_/g; + # $componentname =~ s/_sofficecfg_/_sc_/g; + # $componentname =~ s/_soffice_cfg_/_sc_/g; + # $componentname =~ s/_startmodulecommands_/_smc_/g; + # $componentname =~ s/_drawimpresscommands_/_dic_/g; + # $componentname =~ s/_basiccommands_/_bac_/g; + # $componentname =~ s/_basicidecommands_/_baic_/g; + # $componentname =~ s/_genericcommands_/_genc_/g; + # $componentname =~ s/_bibliographycommands_/_bibc_/g; + # $componentname =~ s/_gentiumbookbasicbolditalic_/_gbbbi_/g; + # $componentname =~ s/_share_/_s_/g; + # $componentname =~ s/_extension_/_ext_/g; + # $componentname =~ s/_extensions_/_exs_/g; + # $componentname =~ s/_modules_/_ms_/g; + # $componentname =~ s/_uiconfig_zip_/_ucz_/g; + # $componentname =~ s/_productivity_/_pr_/g; + # $componentname =~ s/_wizard_/_wz_/g; + # $componentname =~ s/_import_/_im_/g; + # $componentname =~ s/_javascript_/_js_/g; + # $componentname =~ s/_template_/_tpl_/g; + # $componentname =~ s/_tplwizletter_/_twl_/g; + # $componentname =~ s/_beanshell_/_bs_/g; + # $componentname =~ s/_presentation_/_bs_/g; + # $componentname =~ s/_columns_/_cls_/g; + # $componentname =~ s/_python_/_py_/g; + + # $componentname =~ s/_tools/_ts/g; + # $componentname =~ s/_transitions/_trs/g; + # $componentname =~ s/_scriptbinding/_scrb/g; + # $componentname =~ s/_spreadsheet/_ssh/g; + # $componentname =~ s/_publisher/_pub/g; + # $componentname =~ s/_presenter/_pre/g; + # $componentname =~ s/_registry/_reg/g; + + # $componentname =~ s/screen/sc/g; + # $componentname =~ s/wordml/wm/g; + # $componentname =~ s/openoffice/oo/g; + } return $componentname; } diff --git a/solenv/bin/modules/installer/windows/idtglobal.pm b/solenv/bin/modules/installer/windows/idtglobal.pm index 64dc2f34a12a..453464a3ae36 100644 --- a/solenv/bin/modules/installer/windows/idtglobal.pm +++ b/solenv/bin/modules/installer/windows/idtglobal.pm @@ -90,10 +90,8 @@ sub get_next_free_number } until (!($alreadyexists)); - if (( $counter > 9 ) && ( length($name) > 6 )) - { - $dontsave = 1; - } + if (( $counter > 9 ) && ( length($name) > 6 )) { $dontsave = 1; } + if (( $counter > 99 ) && ( length($name) > 5 )) { $dontsave = 1; } if (!($dontsave)) { @@ -192,6 +190,14 @@ sub make_eight_three_conform $name =~ s/\s*$//; # removing ending whitespaces $name = $name . "\~"; $number = get_next_free_number($name, $shortnamesref); + + if ( $number > 99 ) + { + $name = substr($name, 0, 4); # name, offset, length + $name =~ s/\s*$//; # removing ending whitespaces + $name = $name . "\~"; + $number = get_next_free_number($name, $shortnamesref); + } } $name = $name . "$number"; @@ -224,6 +230,14 @@ sub make_eight_three_conform $name =~ s/\s*$//; # removing ending whitespaces $name = $name . "\~"; $number = get_next_free_number($name, $shortnamesref); + + if ( $number > 99 ) + { + $name = substr($name, 0, 4); # name, offset, length + $name =~ s/\s*$//; # removing ending whitespaces + $name = $name . "\~"; + $number = get_next_free_number($name, $shortnamesref); + } } $name = $name . "$number"; diff --git a/solenv/bin/modules/installer/windows/msiglobal.pm b/solenv/bin/modules/installer/windows/msiglobal.pm index 716f63499a02..dbb6e051aa29 100644 --- a/solenv/bin/modules/installer/windows/msiglobal.pm +++ b/solenv/bin/modules/installer/windows/msiglobal.pm @@ -785,11 +785,16 @@ sub get_codepage_for_sis sub get_template_for_sis { - my ( $language ) = @_; + my ( $language, $allvariables ) = @_; my $windowslanguage = installer::windows::language::get_windows_language($language); - my $value = "\"Intel;" . $windowslanguage; # adding the Windows language + my $architecture = "Intel"; + + # Adding 256, if this is a 64 bit installation set. + if (( $allvariables->{'64BITPRODUCT'} ) && ( $allvariables->{'64BITPRODUCT'} == 1 )) { $architecture = "x64"; } + + my $value = "\"" . $architecture . ";" . $windowslanguage; # adding the Windows language $value = $value . "\""; # adding ending '"' @@ -927,7 +932,7 @@ sub write_summary_into_msi_database my $msiversion = get_msiversion_for_sis(); my $codepage = get_codepage_for_sis($language); - my $template = get_template_for_sis($language); + my $template = get_template_for_sis($language, $allvariableshashref); my $guid = get_packagecode_for_sis(); my $title = get_title_for_sis($sislanguage,$languagefile, "OOO_SIS_TITLE"); my $author = get_author_for_sis(); @@ -1669,6 +1674,104 @@ sub set_uuid_into_component_table } +######################################################################### +# Adding final 64 properties into msi database, if required. +# RegLocator : +16 in type column to search in 64 bit registry. +# All conditions: "VersionNT" -> "VersionNT64" (several tables). +# Already done: "+256" in Attributes column of table "Component". +# Still following: Setting "x64" instead of "Intel" in Summary +# Information Stream of msi database in "get_template_for_sis". +######################################################################### + +sub prepare_64bit_database +{ + my ($basedir, $allvariables) = @_; + + my $infoline = ""; + + if (( $allvariables->{'64BITPRODUCT'} ) && ( $allvariables->{'64BITPRODUCT'} == 1 )) + { + # 1. Beginning with table "RegLocat.idt". Adding "16" to the type. + + my $reglocatfile = ""; + my $reglocatfilename = $basedir . $installer::globals::separator . "RegLocat.idt"; + + if ( -f $reglocatfilename ) + { + my $saving_required = 0; + $reglocatfile = installer::files::read_file($reglocatfilename); + + for ( my $i = 3; $i <= $#{$reglocatfile}; $i++ ) # ignoring the first three lines + { + my $oneline = ${$reglocatfile}[$i]; + + if ( $oneline =~ /^\s*\#/ ) { next; } # this is a comment line + if ( $oneline =~ /^\s*$/ ) { next; } + + if ( $oneline =~ /^\s*(.*?)\t(.*?)\t(.*?)\t(.*?)\t(\d+)\s*$/ ) + { + # Syntax: Signature_ Root Key Name Type + my $sig = $1; + my $root = $2; + my $key = $3; + my $name = $4; + my $type = $5; + + $type = $type + 16; + + my $newline = $sig . "\t" . $root . "\t" . $key . "\t" . $name . "\t" . $type . "\n"; + ${$reglocatfile}[$i] = $newline; + + $saving_required = 1; + } + } + + if ( $saving_required ) + { + # Saving the files + installer::files::save_file($reglocatfilename ,$reglocatfile); + $infoline = "Making idt file 64 bit conform: $reglocatfilename\n"; + push(@installer::globals::logfileinfo, $infoline); + } + } + + # 2. Replacing all occurences of "VersionNT" by "VersionNT64" + + my @versionnt_files = ("Componen.idt", "InstallE.idt", "InstallU.idt", "LaunchCo.idt"); + + foreach my $onefile ( @versionnt_files ) + { + my $fullfilename = $basedir . $installer::globals::separator . $onefile; + + if ( -f $fullfilename ) + { + my $saving_required = 0; + $filecontent = installer::files::read_file($fullfilename); + + for ( my $i = 3; $i <= $#{$filecontent}; $i++ ) # ignoring the first three lines + { + my $oneline = ${$filecontent}[$i]; + + if ( $oneline =~ /\bVersionNT\b/ ) + { + ${$filecontent}[$i] =~ s/\bVersionNT\b/VersionNT64/g; + $saving_required = 1; + } + } + + if ( $saving_required ) + { + # Saving the files + installer::files::save_file($fullfilename ,$filecontent); + $infoline = "Making idt file 64 bit conform: $fullfilename\n"; + push(@installer::globals::logfileinfo, $infoline); + } + } + } + } + +} + ################################################################# # Include all cab files into the msi database. # This works only on Windows diff --git a/solenv/bin/packmodule b/solenv/bin/packmodule index d3ae30d48dcd..f2279cfed3f7 100755 --- a/solenv/bin/packmodule +++ b/solenv/bin/packmodule @@ -55,6 +55,7 @@ def main(args): deliverlog = open(os.path.join('inc', module, 'gb_deliver.log')) packedmodule = zipfile.ZipFile(os.path.join(zipdir,module+'.zip'), 'w') [packedmodule.write(path) for path in stripped_paths_to_pack(deliverlog)] + packedmodule.write(os.path.join('inc', module, 'gb_deliver.log')) packedmodule.close() if __name__ == "__main__": diff --git a/solenv/config/sdev300.ini b/solenv/config/sdev300.ini index 5a2454d6444c..10aa9a408607 100644 --- a/solenv/config/sdev300.ini +++ b/solenv/config/sdev300.ini @@ -9,7 +9,7 @@ common BMP_WRITES_FLAG TRUE BUILD_SPECIAL TRUE BUILD_STAX YES - BUILD_TYPE SO OOo EXT BINFILTER MORE_FONTS BSH CURL DICTIONARIES HSQLDB HUNSPELL HYPHEN MYTHES JPEG LIBXML2 LIBXMLSEC LPSOLVE MOZ NEON TWAIN PYTHON ZLIB SANE UNIXODBC X11_EXTENSIONS LIBWPD EPM ODK MSFONTEXTRACT MATHMLDTD BOOST MDDS EXPAT CRASHREP BERKELEYDB LIBXSLT SUN AGG GTK ICU SYSTRAY_GTK JAVAINSTALLER2 VIGRA OPENSSL JFREEREPORT APACHE_COMMONS TOMCAT REPORTBUILDER SDEXT SWEXT XPDF LUCENE REDLAND SAXON WRITER2LATEX NSS L10N GRAPHITE MYSQLCPPCONN MYSQLC CPPUNIT LIBTEXTCAT LIBTEXTCATDATA AFMS + BUILD_TYPE SO OOo EXT BINFILTER MORE_FONTS BSH CURL DICTIONARIES HSQLDB HUNSPELL HYPHEN MYTHES JPEG LIBXML2 LIBXMLSEC LPSOLVE MOZ NEON TWAIN PYTHON ZLIB SANE UNIXODBC X11_EXTENSIONS LIBWPD EPM ODK MSFONTEXTRACT MATHMLDTD BOOST MDDS EXPAT CRASHREP BERKELEYDB LIBXSLT SUN AGG GTK ICU SYSTRAY_GTK JAVAINSTALLER2 VIGRA OPENSSL JFREEREPORT APACHE_COMMONS TOMCAT REPORTBUILDER SDEXT SWEXT XPDF LUCENE REDLAND SAXON WRITER2LATEX NSS GRAPHITE MYSQLCPPCONN MYSQLC CPPUNIT LIBTEXTCAT LIBTEXTCATDATA AFMS CONFIG_PROJECT config_office DIC_ALL TRUE ENABLEUNICODE TRUE @@ -58,7 +58,6 @@ common common:2 IF %UPDATER% == YES { WITH_LANG en-US de - BUILD_TYPE l10n } common:3 IF %UPDATER% != YES { @@ -96,6 +95,7 @@ common PROEXT .pro PROFULLSWITCH product=full } + r_only { LU_RFLAG r_only @@ -116,7 +116,7 @@ common SRC_ROOT UPDATER } - order minorext common:2 common:3 pro:0 pro:1 common common:0 cwsname common:1 tmp crashdump maxproc hg r_only nosource + order minorext common:2 common:3 pro:0 pro:1 common common:0 cwsname common:1 tmp crashdump maxproc hg r_only nosource reset { ALT_L10N_MODULE @@ -138,7 +138,6 @@ common STLPORT4 UPDMINOREXT WITH_FONTOOO - WITH_LANG } restore { @@ -162,6 +161,7 @@ common r_only tmp SOL_TMP_DIR verbose VERBOSE + with_lang } } finish @@ -200,7 +200,6 @@ finish SOLARSRC %SRC_ROOT% SOURCE_ROOT_DIR $expand(%SOLARSRC%/..) ANT_HOME %COMMON_BUILD_TOOLS%$/apache-ant-1.7.1 - DBGSV_INIT %SOLARENV%/bin/dbgsv.ini WORKDIR %SOLARVERSION%/%INPATH%/workdir OUTDIR %SOLARVERSION%/%INPATH% @@ -219,6 +218,11 @@ finish gb_REPOS %SOURCE_ROOT_DIR%/ooo %SOURCE_ROOT_DIR%/sun gb_LOCALBUILDDIR %SOL_TMP%/gb_%CWS_WORK_STAMP%/%WORK_STAMP% } + common_setrepo:0 IF X%WITH_LANG%X != XX + { + gb_REPOS %gb_REPOS% %SOURCE_ROOT_DIR%/l10n + BUILD_TYPE %BUILD_TYPE% L10N + } common_jre:0 IF %JREPATH% == { HIER set @@ -299,7 +303,7 @@ finish JAVA_TARGET_FLAG -target 1.6 } } - order cwsname:0 cwsname:1 cwsname:2 common_0:0 common_0:1 common_0:2 common_0:3 jdk14 jdk15 ojdk16 common_1 common_2:0 l10n common_jre:0 common_jre:1 cax cap common_a + order cwsname:0 cwsname:1 cwsname:2 common_0:0 common_0:1 common_0:2 common_0:3 jdk14 jdk15 ojdk16 common_1 common_2:0 l10n common_jre:0 common_jre:1 cax cap common_a common_setrepo:0 switches { cwsname CWS_WORK_STAMP @@ -603,6 +607,7 @@ unxlngi6 MKOUT %PERL% %SOLARENV%/bin/mkout.pl PATHEXTRA %combin%:/usr/bin:/bin:/usr/sbin:/etc:/usr/bin/X11 FREETYPE_CFLAGS -I%SYSBASE%/usr/include/freetype2 + VALGRIND_CFLAGS -I%SOLARVERSION%$/unxlngi6%PROEXT%$/inc%UPDMINOREXT%/valgrind SOLAREXTRAINC -I%SOLAR_STLPATH% -I%SYSBASE%/usr/include -I%SYSBASE%/usr/include/X11 -I%SYSBASE%/include SOLAREXTRALIB -L../lib -L%SYSBASE%/usr/X11R6/lib -L%SYSBASE%/usr/lib -L/usr/X11R6/lib -L%SOLAR_STLLIBPATH% SOLAR_JAVA TRUE @@ -890,6 +895,7 @@ unxlngx6 MKOUT %PERL% %SOLARENV%/bin/mkout.pl PATHEXTRA %combin%:/usr/bin:/bin:/usr/sbin:/etc:/usr/bin/X11 FREETYPE_CFLAGS -I%SYSBASE%/usr/include/freetype2 + VALGRIND_CFLAGS -I%SOLARVERSION%$/unxlngx6%PROEXT%$/inc%UPDMINOREXT%/valgrind SOLAREXTRAINC -I%SOLAR_STLPATH% -I%SYSBASE%/usr/include -I%SYSBASE%/usr/include/X11 -I%SYSBASE%/include SOLAREXTRALIB -L../lib64 -L%SYSBASE%/usr/lib64 -L%SOLAR_STLLIBPATH% SOLAR_JAVA TRUE @@ -1175,6 +1181,7 @@ unxmacxi LIBRARY_PATH %SYSBASE%/usr/lib MKOUT %PERL% %SOLARENV%/bin/mkout.pl PATHEXTRA %combin%:/usr/bin:/bin:/usr/sbin:/etc + VALGRIND_CFLAGS -I%SOLARVERSION%$/unxmacxi%PROEXT%$/inc%UPDMINOREXT%/valgrind SOLAREXTRAINC -I%SOLAR_STLPATH% -I%SYSBASE%/usr/include/c++/4.0.0 -I%SYSBASE%/usr/include/c++/4.0.0/i686-apple-darwin8 -I%SYSBASE%/usr/lib/gcc/i686-apple-darwin8/4.0.1/include -I%SYSBASE%/usr/include/python2.3 -I%SYSBASE%/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1/include -I%SYSBASE%/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon SOLAREXTRALIB -L%SOLAR_STLLIBPATH% SOLAR_JAVA TRUE diff --git a/solenv/gbuild/AllLangResTarget.mk b/solenv/gbuild/AllLangResTarget.mk index 3bf50bd4e988..1b7acc947bfc 100644 --- a/solenv/gbuild/AllLangResTarget.mk +++ b/solenv/gbuild/AllLangResTarget.mk @@ -28,11 +28,10 @@ # SrsPartMergeTarget class gb_SrsPartMergeTarget_TRANSEXTARGET := $(call gb_Executable_get_target,transex3) -gb_SrsPartMergeTarget_TRANSEXAUXDEPS := $(call gb_Library_get_target,tl) $(call gb_Library_get_target,sal) # gb_SrsPartMergeTarget_TRANSEXPRECOMMAND is set by the platforms gb_SrsPartMergeTarget_TRANSEXCOMMAND := $(gb_SrsPartMergeTarget_TRANSEXPRECOMMAND) $(gb_SrsPartMergeTarget_TRANSEXTARGET) -gb_SrsPartMergeTarget_SDFLOCATION := $(SRCDIR)/l10n/$(INPATH)/misc/sdf/ +gb_SrsPartMergeTarget_SDFLOCATION := $(LOCDIR)/l10n/$(INPATH)/misc/sdf/ gb_SrsPartMergeTarget_REPOS := $(gb_REPOS) define gb_SrsPartMergeTarget__command @@ -49,7 +48,7 @@ $(call gb_Helper_abbreviate_dirs_native,\ endef define gb_SrsPartMergeTarget__rules -$$(call gb_SrsPartMergeTarget_get_target,%) : $(1)/% $$(gb_Helper_MISCDUMMY) | $$(gb_SrsPartMergeTarget_TRANSEXTARGET) $$(gb_SrsPartMergeTarget_TRANSEXAUXDEPS) +$$(call gb_SrsPartMergeTarget_get_target,%) : $(1)/% $$(gb_Helper_MISCDUMMY) | $$(gb_SrsPartMergeTarget_TRANSEXTARGET) $$(if $$(SDF),$$(call gb_SrsPartMergeTarget__command,$$@,$$*,$$<),mkdir -p $$(dir $$@) && cp $$< $$@) endef diff --git a/solenv/gbuild/CppunitTest.mk b/solenv/gbuild/CppunitTest.mk index a3b18a4a0bbd..c44ad5947010 100644 --- a/solenv/gbuild/CppunitTest.mk +++ b/solenv/gbuild/CppunitTest.mk @@ -28,6 +28,10 @@ # CppunitTest class +# in non-product builds, ensure that tools-based assertions do not pop up as message box, but are routed to the shell +DBGSV_ERROR_OUT := shell +export DBGSV_ERROR_OUT + # defined by platform # gb_CppunitTest_TARGETTYPE # gb_CppunitTest_get_filename diff --git a/solenv/gbuild/JunitTest.mk b/solenv/gbuild/JunitTest.mk index afc9486fd5a4..5699398241ca 100644 --- a/solenv/gbuild/JunitTest.mk +++ b/solenv/gbuild/JunitTest.mk @@ -30,6 +30,10 @@ gb_JunitTest_JAVACOMMAND := $(JAVAINTERPRETER) $(JAVAIFLAGS) +# in non-product builds, ensure that tools-based assertions do not pop up as message box, but are routed to the shell +DBGSV_ERROR_OUT := shell +export DBGSV_ERROR_OUT + .PHONY : $(call gb_JunitTest_get_clean_target,%) $(call gb_JunitTest_get_clean_target,%) : $(call gb_JavaClassSet_get_clean_target,$(call gb_JunitTest_get_classsetname,%)) $(call gb_Helper_abbreviate_dirs,\ diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index 8f681b5e4d5c..cdde6ab3dbaf 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -239,7 +239,7 @@ $(call gb_LinkTarget_get_clean_target,%) : $(call gb_LinkTarget_get_external_headers_target,$*) \ $(DLLTARGET) \ $(AUXTARGETS)) && \ - cat $${RESPONSEFILE} |xargs -n 200 rm -f && \ + cat $${RESPONSEFILE} /dev/null | xargs -n 200 rm -f && \ rm -f $${RESPONSEFILE} @@ -254,7 +254,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(foreach object,$(5),$(call gb_ObjCxxObject_get_dep_target,$(object)))\ $(foreach object,$(6),$(call gb_GenCxxObject_get_dep_target,$(object)))\ ) && \ - cat $${RESPONSEFILE} |xargs -n 200 cat > $(1)) && \ + cat $${RESPONSEFILE} /dev/null | xargs -n 200 cat > $(1)) && \ rm -f $${RESPONSEFILE} endef diff --git a/solenv/gbuild/SdiTarget.mk b/solenv/gbuild/SdiTarget.mk index 49bf290e096c..8f8670c6950d 100644 --- a/solenv/gbuild/SdiTarget.mk +++ b/solenv/gbuild/SdiTarget.mk @@ -32,10 +32,9 @@ # SdiTarget class gb_SdiTarget_SVIDLTARGET := $(call gb_Executable_get_target,svidl) -gb_SdiTarget_SVIDLAUXDEPS := $(call gb_Library_get_target,tl) $(call gb_Library_get_target,sal) gb_SdiTarget_SVIDLCOMMAND := $(gb_SdiTarget_SVIDLPRECOMMAND) $(gb_SdiTarget_SVIDLTARGET) -$(call gb_SdiTarget_get_target,%) : $(SRCDIR)/%.sdi | $(gb_SdiTarget_SVIDLTARGET) $(gb_SdiTarget_SVIDLAUXDEPS) +$(call gb_SdiTarget_get_target,%) : $(SRCDIR)/%.sdi | $(gb_SdiTarget_SVIDLTARGET) $(call gb_Output_announce,$*,$(true),SDI,1) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $@)) diff --git a/solenv/gbuild/extensions/post_PackModule.mk b/solenv/gbuild/extensions/post_PackModule.mk index 3a573cbc5d7e..f39268a9eea7 100644 --- a/solenv/gbuild/extensions/post_PackModule.mk +++ b/solenv/gbuild/extensions/post_PackModule.mk @@ -41,7 +41,7 @@ packmodule : COMMAND := true endif endef -packmodule : all deliverlog +packmodule : allandcheck deliverlog $(eval $(call gb_PackModule_setpackmodulecommand)) $(COMMAND) diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk index 46f1b72dda52..c370ca57ce81 100644 --- a/solenv/gbuild/gbuild.mk +++ b/solenv/gbuild/gbuild.mk @@ -100,7 +100,7 @@ gb_ENABLE_PCH := $(false) endif # for clean, setuplocal and removelocal goals we switch off dependencies -ifneq ($(filter clean setuplocal removelocal showdeliverables,$(MAKECMDGOALS)),) +ifneq ($(filter cleanpackmodule clean setuplocal removelocal showdeliverables,$(MAKECMDGOALS)),) gb_FULLDEPS := $(false) else gb_FULLDEPS := $(true) diff --git a/solenv/gbuild/platform/linux.mk b/solenv/gbuild/platform/linux.mk index ed8c08ac348a..0a239360d724 100755..100644 --- a/solenv/gbuild/platform/linux.mk +++ b/solenv/gbuild/platform/linux.mk @@ -30,7 +30,7 @@ COM := GCC gb_MKTEMP := mktemp -t gbuild.XXXXXX -gb_CC := cc +gb_CC := gcc gb_CXX := g++ gb_GCCP := gcc gb_AR := ar @@ -122,7 +122,7 @@ gb_LinkTarget_NOEXCEPTIONFLAGS := \ gb_LinkTarget_LDFLAGS := \ -Wl,--sysroot=$(SYSBASE) \ - -Wl,-rpath-link=$(SOLARLIBDIR):$(SYSBASE)/lib:$(SYSBASE)/usr/lib \ + -Wl,-rpath-link,$(SYSBASE)/lib:$(SYSBASE)/usr/lib \ -Wl,-z,combreloc \ -Wl,-z,defs \ $(subst -L../lib , ,$(SOLARLIB)) \ @@ -153,6 +153,12 @@ gb_COMPILERNOOPTFLAGS := -O0 gb_Helper_abbreviate_dirs_native = $(gb_Helper_abbreviate_dirs) +# convert parametters filesystem root to native notation +# does some real work only on windows, make sure not to +# break the dummy implementations on unx* +define gb_Helper_convert_native +$(1) +endef # CObject class diff --git a/solenv/gbuild/platform/macosx.mk b/solenv/gbuild/platform/macosx.mk index d6b84dc43e6d..b54cb8fb1b9d 100755..100644 --- a/solenv/gbuild/platform/macosx.mk +++ b/solenv/gbuild/platform/macosx.mk @@ -142,6 +142,13 @@ gb_COMPILERNOOPTFLAGS := -O0 gb_Helper_abbreviate_dirs_native = $(gb_Helper_abbreviate_dirs) +# convert parametters filesystem root to native notation +# does some real work only on windows, make sure not to +# break the dummy implementations on unx* +define gb_Helper_convert_native +$(1) +endef + # CObject class diff --git a/solenv/gbuild/platform/solaris.mk b/solenv/gbuild/platform/solaris.mk index 0caafa5446fa..f39f3e559385 100755..100644 --- a/solenv/gbuild/platform/solaris.mk +++ b/solenv/gbuild/platform/solaris.mk @@ -34,7 +34,7 @@ gb_CC := cc gb_CXX := CC gb_GCCP := cc gb_AR := ar -gb_AWK := nawk +gb_AWK := /usr/xpg4/bin/awk gb_CLASSPATHSEP := : # use CC/CXX if they are nondefaults @@ -126,6 +126,13 @@ gb_COMPILERNOOPTFLAGS := gb_Helper_abbreviate_dirs_native = $(gb_Helper_abbreviate_dirs) +# convert parametters filesystem root to native notation +# does some real work only on windows, make sure not to +# break the dummy implementations on unx* +define gb_Helper_convert_native +$(1) +endef + # CObject class diff --git a/solenv/gbuild/platform/windows.mk b/solenv/gbuild/platform/windows.mk index 23f6b60da94f..4a2922164286 100755..100644 --- a/solenv/gbuild/platform/windows.mk +++ b/solenv/gbuild/platform/windows.mk @@ -30,7 +30,7 @@ COM := MSC # set tmpdir to some mixed case path, suitable for native tools gb_TMPDIR:=$(if $(TMPDIR),$(shell cygpath -m $(TMPDIR)),$(shell cygpath -m /tmp)) -gb_MKTEMP := mktemp --tmpdir=$(gb_TMPDIR) -t gbuild.XXXXXX +gb_MKTEMP := mktemp --tmpdir=$(gb_TMPDIR) gbuild.XXXXXX gb_CC := cl gb_CXX := cl @@ -230,6 +230,17 @@ R=$(gb_Helper_REPODIR_NATIVE) && $(subst $(REPODIR)/,$$R/,$(subst $(gb_Helper_RE $(subst $(REPODIR)/,$$R/,$(subst $(SRCDIR)/,$$S/,$(subst $(OUTDIR)/,$$O/,$(subst $(WORKDIR)/,$$W/,$(subst $(gb_Helper_REPODIR_NATIVE)/,$$R/,$(subst $(gb_Helper_SRCDIR_NATIVE)/,$$S/,$(subst $(gb_Helper_OUTDIR_NATIVE)/,$$O/,$(subst $(gb_Helper_WORKDIR_NATIVE)/,$$W/,$(1))))))))) endef +# convert parametters filesystem root to native notation +# does some real work only on windows, make sure not to +# break the dummy implementations on unx* +define gb_Helper_convert_native +$(patsubst -I$(OUTDIR)%,-I$(gb_Helper_OUTDIR_NATIVE)%, \ +$(patsubst $(OUTDIR)%,$(gb_Helper_OUTDIR_NATIVE)%, \ +$(patsubst $(WORKDIR)%,$(gb_Helper_WORKDIR_NATIVE)%, \ +$(patsubst $(SRCDIR)%,$(gb_Helper_SRCDIR_NATIVE)%, \ +$(1))))) +endef + # CObject class @@ -409,11 +420,11 @@ $(call gb_Output_announce,$(2),$(true),LNK,4) $(call gb_Helper_abbreviate_dirs_native,\ mkdir -p $(dir $(1)) && \ rm -f $(1) && \ - RESPONSEFILE=`$(gb_MKTEMP)` && \ - echo "$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),100, \ + $(call gb_Helper_convert_native,$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ - $(PCHOBJS) $(NATIVERES)" > $${RESPONSEFILE} && \ + $(PCHOBJS) $(NATIVERES))) && \ $(gb_LINK) \ $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ $(if $(filter StaticLibrary,$(TARGETTYPE)),$(gb_StaticLibrary_TARGETTYPEFLAGS)) \ diff --git a/solenv/gbuild/platform/winmingw.mk b/solenv/gbuild/platform/winmingw.mk index 9c3764fd328b..62167b4b1b9f 100644 --- a/solenv/gbuild/platform/winmingw.mk +++ b/solenv/gbuild/platform/winmingw.mk @@ -28,7 +28,9 @@ GUI := WNT COM := GCC -gb_MKTEMP := mktemp -t gbuild.XXXXXX +# set tmpdir to some mixed case path, suitable for native tools +gb_TMPDIR:=$(if $(TMPDIR),$(shell cygpath -m $(TMPDIR)),$(shell cygpath -m /tmp)) +gb_MKTEMP := mktemp --tmpdir=$(gb_TMPDIR) gbuild.XXXXXX gb_CC := $(CC) gb_CXX := $(CXX) @@ -196,6 +198,17 @@ R=$(gb_Helper_REPODIR_NATIVE) && $(subst $(REPODIR)/,$$R/,$(subst $(gb_Helper_RE $(subst $(REPODIR)/,$$R/,$(subst $(SRCDIR)/,$$S/,$(subst $(OUTDIR)/,$$O/,$(subst $(WORKDIR)/,$$W/,$(subst $(gb_Helper_REPODIR_NATIVE)/,$$R/,$(subst $(gb_Helper_SRCDIR_NATIVE)/,$$S/,$(subst $(gb_Helper_OUTDIR_NATIVE)/,$$O/,$(subst $(gb_Helper_WORKDIR_NATIVE)/,$$W/,$(1))))))))) endef +# convert parametters filesystem root to native notation +# does some real work only on windows, make sure not to +# break the dummy implementations on unx* +define gb_Helper_convert_native +$(patsubst -I$(OUTDIR)%,-I$(gb_Helper_OUTDIR_NATIVE)%, \ +$(patsubst $(OUTDIR)%,$(gb_Helper_OUTDIR_NATIVE)%, \ +$(patsubst $(WORKDIR)%,$(gb_Helper_WORKDIR_NATIVE)%, \ +$(patsubst $(SRCDIR)%,$(gb_Helper_SRCDIR_NATIVE)%, \ +$(1))))) +endef + # CObject class ifeq ($(gb_FULLDEPS),$(true)) diff --git a/solenv/inc/_cppunit.mk b/solenv/inc/_cppunit.mk index 8d9e45d33331..85804dd41ac6 100644 --- a/solenv/inc/_cppunit.mk +++ b/solenv/inc/_cppunit.mk @@ -1,7 +1,7 @@ # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL1TARGET)"!="" +.IF "$(SHL1TARGETN)"!="" ALLTAR : test1 test1 .PHONY : $(SHL1TARGETN) @echo ---------------------------------------------------------- @@ -13,7 +13,7 @@ test1 .PHONY : $(SHL1TARGETN) # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL2TARGET)"!="" +.IF "$(SHL2TARGETN)"!="" ALLTAR : test2 test2 .PHONY : $(SHL2TARGETN) @echo ---------------------------------------------------------- @@ -25,7 +25,7 @@ test2 .PHONY : $(SHL2TARGETN) # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL3TARGET)"!="" +.IF "$(SHL3TARGETN)"!="" ALLTAR : test3 test3 .PHONY : $(SHL3TARGETN) @echo ---------------------------------------------------------- @@ -37,7 +37,7 @@ test3 .PHONY : $(SHL3TARGETN) # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL4TARGET)"!="" +.IF "$(SHL4TARGETN)"!="" ALLTAR : test4 test4 .PHONY : $(SHL4TARGETN) @echo ---------------------------------------------------------- @@ -49,7 +49,7 @@ test4 .PHONY : $(SHL4TARGETN) # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL5TARGET)"!="" +.IF "$(SHL5TARGETN)"!="" ALLTAR : test5 test5 .PHONY : $(SHL5TARGETN) @echo ---------------------------------------------------------- @@ -61,7 +61,7 @@ test5 .PHONY : $(SHL5TARGETN) # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL6TARGET)"!="" +.IF "$(SHL6TARGETN)"!="" ALLTAR : test6 test6 .PHONY : $(SHL6TARGETN) @echo ---------------------------------------------------------- @@ -73,7 +73,7 @@ test6 .PHONY : $(SHL6TARGETN) # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL7TARGET)"!="" +.IF "$(SHL7TARGETN)"!="" ALLTAR : test7 test7 .PHONY : $(SHL7TARGETN) @echo ---------------------------------------------------------- @@ -85,7 +85,7 @@ test7 .PHONY : $(SHL7TARGETN) # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL8TARGET)"!="" +.IF "$(SHL8TARGETN)"!="" ALLTAR : test8 test8 .PHONY : $(SHL8TARGETN) @echo ---------------------------------------------------------- @@ -97,7 +97,7 @@ test8 .PHONY : $(SHL8TARGETN) # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL9TARGET)"!="" +.IF "$(SHL9TARGETN)"!="" ALLTAR : test9 test9 .PHONY : $(SHL9TARGETN) @echo ---------------------------------------------------------- @@ -109,7 +109,7 @@ test9 .PHONY : $(SHL9TARGETN) # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL10TARGET)"!="" +.IF "$(SHL10TARGETN)"!="" ALLTAR : test10 test10 .PHONY : $(SHL10TARGETN) @echo ---------------------------------------------------------- diff --git a/solenv/inc/cppunit.mk b/solenv/inc/cppunit.mk index 2173f1a9ff9a..b30ca7152700 100644 --- a/solenv/inc/cppunit.mk +++ b/solenv/inc/cppunit.mk @@ -44,7 +44,7 @@ # unroll begin # ---- create the test libraries ------------------------------------ -.IF "$(SHL$(TNR)TARGET)"!="" +.IF "$(SHL$(TNR)TARGETN)"!="" ALLTAR : test$(TNR) test$(TNR) .PHONY : $(SHL$(TNR)TARGETN) @echo ---------------------------------------------------------- diff --git a/solenv/inc/extension_post.mk b/solenv/inc/extension_post.mk index f221ff7ebe4a..7b8c99b37fe8 100644 --- a/solenv/inc/extension_post.mk +++ b/solenv/inc/extension_post.mk @@ -69,10 +69,22 @@ $(COMPONENT_JARFILES) : $(CLASSDIR)/$$(@:f) .ENDIF # "$(COMPONENT_JARFILES)"!="" .IF "$(COMPONENT_LIBRARIES)"!="" +PACK_RUNTIME!:=TRUE # TODO(Q3): strip the binary? $(COMPONENT_LIBRARIES) : $(DLLDEST)/$$(@:f) @@-$(MKDIRHIER) $(@:d) $(COMMAND_ECHO)$(COPY) $< $@ +.ENDIF # "$(COMPONENT_LIBRARIES)"!="" + +.IF "$(PACK_RUNTIME)"!="" +PACK_RUNTIME_FLAG:=$(MISC)/$(TARGET)_pack_runtime.flag +$(EXTENSION_TARGET) : $(PACK_RUNTIME_FLAG) + +$(EXTENSIONDIR) : + @@-$(MKDIRHIER) $(@:d) + +$(PACK_RUNTIME_FLAG) : $(EXTENSIONDIR) + @@-$(MKDIRHIER) $(@:d) .IF "$(OS)$(CPU)"=="WNTI" .IF "$(COM)"=="GCC" $(GNUCOPY) $(SOLARBINDIR)/mingwm10.dll $(EXTENSIONDIR) @@ -120,7 +132,8 @@ $(COMPONENT_LIBRARIES) : $(DLLDEST)/$$(@:f) .ENDIF # "$(PACKMS)"!="" .ENDIF #"$(COM)"=="GCC" .ENDIF # "$(OS)$(CPU)"=="WNTI" -.ENDIF # "$(COMPONENT_LIBRARIES)"!="" + @$(TOUCH) $@ +.ENDIF # "$(PACK_RUNTIME)"!="" IMPLEMENTATION_IDENTIFIER*="com.sun.star.$(EXTENSIONNAME)-$(PLATFORMID)" diff --git a/solenv/inc/installationtest.mk b/solenv/inc/installationtest.mk index b7b49c4aec3b..8553a739d5d1 100644 --- a/solenv/inc/installationtest.mk +++ b/solenv/inc/installationtest.mk @@ -23,6 +23,22 @@ # for a copy of the LGPLv3 License. #***********************************************************************/ +# relevant for non-product builds only, but built unconditionally +.IF "$(ABORT_ON_ASSERTION)" != "" + DBGSV_ERROR_OUT=abort + SAL_DIAGNOSE_ABORT=TRUE + .EXPORT: SAL_DIAGNOSE_ABORT +.ELSE + DBGSV_ERROR_OUT=shell +.ENDIF +.EXPORT: DBGSV_ERROR_OUT + +# don't allow to overwrite DBGSV_ERROR_OUT with an INI file. Otherwise, people +# might be tempted to put an DBGSV_INIT into their .bash_profile which points to a file +# delcaring to ignore all assertions completely ... +DBGSV_INIT= +.EXPORT: DBGSV_INIT + .IF "$(OS)" == "WNT" my_file = file:/// .ELSE @@ -79,28 +95,29 @@ my_javaenv = \ # on other platforms, a single installation to solver is created in # smoketestoo_native: .IF "$(OS)" == "WNT" && "$(OOO_TEST_SOFFICE)" == "" +OOO_EXTRACT_TO:=$(shell cygpath -m `mktemp -dt ooosmoke.XXXXXX`) $(MISC)/$(TARGET)/installation.flag : $(shell \ ls $(installationtest_instset)/OOo_*_install-arc_$(defaultlangiso).zip) - $(MKDIRHIER) $(@:d) - my_tmp=$$(cygpath -m $$(mktemp -dt ooosmoke.XXXXXX)) && \ - unzip $(installationtest_instset)/OOo_*_install-arc_$(defaultlangiso).zip \ - -d "$$my_tmp" && \ - mv "$$my_tmp"/OOo_*_install-arc_$(defaultlangiso) "$$my_tmp"/opt && \ - echo "$$my_tmp" > $@ + $(COMMAND_ECHO)$(MKDIRHIER) $(@:d) + $(COMMAND_ECHO)unzip -q $(installationtest_instset)/OOo_*_install-arc_$(defaultlangiso).zip -d "$(OOO_EXTRACT_TO)" + $(COMMAND_ECHO)mv "$(OOO_EXTRACT_TO)"/OOo_*_install-arc_$(defaultlangiso) "$(OOO_EXTRACT_TO)"/opt + $(COMMAND_ECHO)echo "$(OOO_EXTRACT_TO)" > $@ .END cpptest .PHONY : - $(RM) -r $(MISC)/$(TARGET)/user - $(MKDIRHIER) $(MISC)/$(TARGET)/user + $(COMMAND_ECHO)$(RM) -r $(MISC)/$(TARGET)/user + $(COMMAND_ECHO)$(MKDIRHIER) $(MISC)/$(TARGET)/user $(CPPUNITTESTER) \ -env:UNO_SERVICES=$(my_file)$(SOLARXMLDIR)/ure/services.rdb \ -env:UNO_TYPES=$(my_file)$(SOLARBINDIR)/types.rdb \ -env:arg-soffice=$(my_soffice) -env:arg-user=$(MISC)/$(TARGET)/user \ - $(my_cppenv) $(TEST_ARGUMENTS:^"-env:arg-testarg.") $(CPPTEST_LIBRARY) - # As a workaround for #i111400#, ignore failure of $(RM): - - $(RM) -r $(MISC)/$(TARGET)/user + $(my_cppenv) $(TEST_ARGUMENTS:^"-env:arg-testarg.") --protector \ + $(SOLARSHAREDBIN)/unoexceptionprotector$(DLLPOST) \ + unoexceptionprotector $(CPPTEST_LIBRARY) +# As a workaround for #i111400#, ignore failure of $(RM): + $(COMMAND_ECHO)- $(RM) -r $(MISC)/$(TARGET)/user .IF "$(OS)" == "WNT" && "$(OOO_TEST_SOFFICE)" == "" - $(RM) -r $(installationtest_instpath) $(MISC)/$(TARGET)/installation.flag + $(COMMAND_ECHO)$(RM) -r $(installationtest_instpath) $(MISC)/$(TARGET)/installation.flag cpptest : $(MISC)/$(TARGET)/installation.flag .END @@ -137,5 +154,5 @@ javatest : $(MISC)/$(TARGET)/installation.flag .END .ELSE javatest .PHONY : - echo 'javatest needs SOLAR_JAVA=TRUE and OOO_JUNIT_JAR' + @echo 'javatest needs SOLAR_JAVA=TRUE and OOO_JUNIT_JAR' .END diff --git a/solenv/inc/langlist.mk b/solenv/inc/langlist.mk index 32045cbf6262..4f311a1bec4a 100644 --- a/solenv/inc/langlist.mk +++ b/solenv/inc/langlist.mk @@ -25,7 +25,6 @@ # #************************************************************************* - completelangiso=af \ ar \ as \ @@ -60,6 +59,7 @@ eu \ fa \ fi \ fr \ +fur \ ga \ gd \ gl \ @@ -69,10 +69,12 @@ he \ hi \ hi-IN \ hr \ +ht \ hu \ is \ it \ ja \ +jbo \ kid \ ky \ ka \ @@ -104,6 +106,7 @@ nn \ nr \ ns \ nso \ +ny \ om \ oms \ oc \ @@ -131,7 +134,7 @@ sq \ sk \ sl \ sh \ -son \ +so \ sr \ ss \ st \ diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk index 240547d98fa7..19b8ca8eed4e 100644 --- a/solenv/inc/minor.mk +++ b/solenv/inc/minor.mk @@ -1,5 +1,5 @@ RSCVERSION=300 -RSCREVISION=300m100(Build:9571) -BUILD=9571 -LAST_MINOR=m100 +RSCREVISION=300m103(Build:9578) +BUILD=9578 +LAST_MINOR=m103 SOURCEVERSION=DEV300 diff --git a/solenv/inc/settings.mk b/solenv/inc/settings.mk index a095b7762fbe..b0872169bfc6 100644 --- a/solenv/inc/settings.mk +++ b/solenv/inc/settings.mk @@ -810,7 +810,7 @@ SOLARCOMMONSDFDIR=$(SOLARSDFDIR) .EXPORT : SOLARBINDIR -L10N_MODULE*=$(SOLARSRC)$/l10n +L10N_MODULE*=$(SOURCE_ROOT_DIR)/l10n/l10n ALT_L10N_MODULE*=$(SOLARSRC)$/l10n_so .IF "$(WITH_LANG)"!="" diff --git a/solenv/inc/tg_ext.mk b/solenv/inc/tg_ext.mk index e19c7124d4a7..63c0c995f42a 100644 --- a/solenv/inc/tg_ext.mk +++ b/solenv/inc/tg_ext.mk @@ -312,11 +312,11 @@ $(MISC)/$(TARFILE_ROOTDIR).done : $(MISC)/$(TARFILE_MD5)-$(TARFILE_NAME).unpack #.IF "$(my4ver:s/.//:s/,//)" >= "300" # $(COMMAND_ECHO)cd $(MISC) && ( $(TYPE:s/+//) $(BACK_PATH)$(PATH_IN_MODULE)/{$(PATCH_FILES)} | tr -d "\015" | patch $(PATCHFLAGS) -p2 ) #.ELSE # "$(my4ver:s/.//:s/,//)" >= "300" - $(COMMAND_ECHO)cd $(MISC) && $(TYPE:s/+//) $(BACK_PATH)$(PATH_IN_MODULE)/{$(PATCH_FILES)} | tr -d "\015" | patch $(PATCHFLAGS) -p2 + $(COMMAND_ECHO)cd $(MISC) && $(TYPE:s/+//) $(MBACK_PATH)$(PATH_IN_MODULE)/{$(PATCH_FILES)} | tr -d "\015" | patch $(PATCHFLAGS) -p2 #.ENDIF # "$(my4ver:s/.//:s/,//)" >= "300" .ELSE # "$(GUI)"=="WNT" .IF "$(BSCLIENT)"=="TRUE" - $(COMMAND_ECHO)cd $(MISC) && $(TYPE) $(BACK_PATH)$(PATH_IN_MODULE)/{$(PATCH_FILES)} | $(GNUPATCH) -f $(PATCHFLAGS) -p2 + $(COMMAND_ECHO)cd $(MISC) && $(TYPE) $(MBACK_PATH)$(PATH_IN_MODULE)/{$(PATCH_FILES)} | $(GNUPATCH) -f $(PATCHFLAGS) -p2 .ELSE # "$(BSCLIENT)"!="" $(COMMAND_ECHO)cd $(MISC) && $(TYPE) $(MBACK_PATH)$(PATH_IN_MODULE)/{$(PATCH_FILES)} | $(GNUPATCH) $(PATCHFLAGS) -p2 .ENDIF # "$(BSCLIENT)"!="" diff --git a/solenv/inc/tg_wntx64.mk b/solenv/inc/tg_wntx64.mk index 12e049763a84..85f60c0f95a0 100644 --- a/solenv/inc/tg_wntx64.mk +++ b/solenv/inc/tg_wntx64.mk @@ -1,7 +1,7 @@ #************************************************************************* # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# +# # Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite @@ -131,7 +131,7 @@ $(LIB2TARGET_X64) : $(LIB2FILES_X64) \ $(DEF1TARGETN_X64) : \ $(DEF1DEPN_X64) \ $(DEF1EXPORTFILE_X64) - @-$(MKDIR) $(MISC_X64) + @-$(MKDIR) $(MISC_X64) @-$(RM) $@.tmpfile @echo ------------------------------ @echo Making Module-Definitionfile : $@ @@ -210,7 +210,7 @@ $(DEF2TARGETN_X64) : \ SHL1VERSIONOBJ_X64:=$(VERSIONOBJ_X64:d){$(subst,$(UPD)$(DLLPOSTFIX),_dflt $(SHL1TARGET_X64))}$(VERSIONOBJ_X64:f) USE_VERSIONH_X64:=$(INCCOM)/$(SHL1VERSIONOBJ_X64:b).h SHL1VERSIONOBJDEP_X64:=$(VERSIONOBJ_X64:d){$(subst,$(UPD)$(DLLPOSTFIX),_dflt $(SHL1TARGET_X64))}$(VERSIONOBJ_X64:f) -$(MISC_X64)/$(SHL1VERSIONOBJ_X64:b).c : $(SOLARENV)/src/version.c $(INCCOM)/$(SHL1VERSIONOBJ_X64:b).h +$(MISC_X64)/$(SHL1VERSIONOBJ_X64:b).c : make_x64_dirs $(SOLARENV)/src/version.c $(INCCOM)/$(SHL1VERSIONOBJ_X64:b).h $(COMMAND_ECHO)$(TYPE) $(SOLARENV)/src/version.c | $(SED) s/_version.h/$(SHL1VERSIONOBJ_X64:b).h/ > $@ .INIT : $(SHL1VERSIONOBJDEP_X64) .ENDIF @@ -354,7 +354,7 @@ ALLTAR : $(SHL2IMPLIBN_X64) SHL2VERSIONOBJ_X64:=$(VERSIONOBJ_X64:d){$(subst,$(UPD)$(DLLPOSTFIX),_dflt $(SHL2TARGET_X64))}$(VERSIONOBJ_X64:f) USE_VERSIONH_X64:=$(INCCOM)/$(SHL2VERSIONOBJ_X64:b).h SHL2VERSIONOBJDEP_X64:=$(VERSIONOBJ_X64:d){$(subst,$(UPD)$(DLLPOSTFIX),_dflt $(SHL2TARGET_X64))}$(VERSIONOBJ_X64:f) -$(MISC_X64)/$(SHL2VERSIONOBJ_X64:b).c : $(SOLARENV)/src/version.c $(INCCOM)/$(SHL2VERSIONOBJ_X64:b).h +$(MISC_X64)/$(SHL2VERSIONOBJ_X64:b).c : make_x64_dirs $(SOLARENV)/src/version.c $(INCCOM)/$(SHL2VERSIONOBJ_X64:b).h $(COMMAND_ECHO)$(TYPE) $(SOLARENV)/src/version.c | $(SED) s/_version.h/$(SHL2VERSIONOBJ_X64:b).h/ > $@ .INIT : $(SHL2VERSIONOBJDEP_X64) .ENDIF diff --git a/solenv/inc/unxlngppc.mk b/solenv/inc/unxlngppc.mk index 408233539bf8..89b2501bf366 100644 --- a/solenv/inc/unxlngppc.mk +++ b/solenv/inc/unxlngppc.mk @@ -31,7 +31,4 @@ DEFAULTOPT=-Os PICSWITCH:=-fPIC .INCLUDE : unxlng.mk CDEFS+=-DPOWERPC -DPPC -CFLAGS+=-fsigned-char -CFLAGSCC+=-fsigned-char -CFLAGSCXX+=-fsigned-char DLLPOSTFIX=lp diff --git a/soltools/cpp/_eval.c b/soltools/cpp/_eval.c index a652e488d78f..a6406faed788 100644 --- a/soltools/cpp/_eval.c +++ b/soltools/cpp/_eval.c @@ -1,6 +1,7 @@ +#include "cpp.h" + #include <stdlib.h> #include <string.h> -#include "cpp.h" #define NSTAK 32 #define SGN 0 @@ -711,11 +712,11 @@ struct value } else { - static char cvcon[] - = "b\bf\fn\nr\rt\tv\v''\"\"??\\\\"; - size_t j; + static char cvcon[] = "b\bf\fn\nr\rt\tv\v''\"\"??\\\\"; + static size_t cvlen = sizeof(cvcon) - 1; - for (j = 0; j < sizeof(cvcon); j += 2) + size_t j; + for (j = 0; j < cvlen; j += 2) { if (*p == cvcon[j]) { @@ -724,7 +725,7 @@ struct value } } p += 1; - if (j >= sizeof(cvcon)) + if (j >= cvlen) error(WARNING, "Undefined escape in character constant"); } diff --git a/soltools/cpp/_lex.c b/soltools/cpp/_lex.c index 2ff188ff2264..2236fd9db260 100644 --- a/soltools/cpp/_lex.c +++ b/soltools/cpp/_lex.c @@ -262,7 +262,7 @@ void bigfsm[j][fp->state] = (short) nstate; continue; case C_ALPH: - for (j = 0; j <= 256; j++) + for (j = 0; j < 256; j++) #ifdef S390 if( isalpha( j ) || (j == '_') ) #else |