Using --preserve-dup-deps still results in convenience libraries being deduplicated. I found this, but little else: http://osdir.com/ml/gnu.libtool.bugs/2006/msg00233.html
Hi Clint, * Clint Adams wrote on Sat, Dec 13, 2008 at 07:24:14PM CET: Does it work with 2.2.x from experimental? If no, please post the exact command used to link, and all of its output, thanks. It depends on some details whether duplication is kept (search for "Pedantically" in the script). Cheers, Ralf
No, it does not. If I swap out the case statement for the "right thing to do" under "Pedantically", it seems to work. /bin/bash ../libtool --tag=CC --preserve-dup-deps --mode=link gcc -Wall -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -g -O2 -o civserver civserver.o ../utility/libcivutility.la ../common/libcivcommon.la ../ai/libcivai.la ../utility/libcivutility.la ./libcivserver.la ../utility/libcivutility.la ../common/libcivcommon.la ../ai/libcivai.la ../utility/libcivutility.la ./libcivserver.la ../utility/libcivutility.la ../common/aicore/libaicore.la ./generator/libgenerator.la ./scripting/libscripting.la ../dependencies/lua-5.1/src/liblua.a ../dependencies/toluaxx/src/lib/libtolua.a -lreadline -lm -lz libtool: link: gcc -Wall -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -g -O2 -o civserver civserver.o ../common/.libs/libcivcommon.a ../ai/.libs/libcivai.a ./.libs/libcivserver.a ../utility/.libs/libcivutility.a ../common/aicore/.libs/libaicore.a ./generator/.libs/libgenerator.a ./scripting/.libs/libscripting.a ../dependencies/lua-5.1/src/liblua.a ../dependencies/toluaxx/src/lib/libtolua.a -lreadline -lm -lz ./.libs/libcivserver.a(plrhand.o): In function `player_info_level': /home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1110: undefined reference to `could_intel_with_player' ./.libs/libcivserver.a(plrhand.o): In function `split_player': /home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1628: undefined reference to `ai_data_phase_init' /home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1629: undefined reference to `assess_danger_player' /home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1631: undefined reference to `assess_danger_player' ./.libs/libcivserver.a(plrhand.o): In function `handle_diplomacy_cancel_pact': /home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:573: undefined reference to `ai_incident_war' ./.libs/libcivserver.a(plrhand.o): In function `make_contact': /home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1257: undefined reference to `ai_diplomacy_first_contact' /home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1254: undefined reference to `ai_diplomacy_first_contact' ./.libs/libcivserver.a(plrhand.o): In function `server_player_init': /home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1146: undefined reference to `ai_data_init' ./.libs/libcivserver.a(srv_main.o): In function `server_game_free': /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:2205: undefined reference to `vision_free' /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:2214: undefined reference to `vision_free' ./.libs/libcivserver.a(srv_main.o): In function `srv_ready': /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:2148: undefined reference to `ai_data_analyze_rulesets' /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:2159: undefined reference to `ai_data_init' ./.libs/libcivserver.a(srv_main.o): In function `begin_phase': /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:707: undefined reference to `ai_data_phase_init' /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:709: undefined reference to `ai_manage_buildings' /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:728: undefined reference to `ai_diplomacy_actions' ./.libs/libcivserver.a(srv_main.o): In function `end_phase': /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:791: undefined reference to `ai_settler_init' /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:795: undefined reference to `ai_do_last_activities' ./.libs/libcivserver.a(srv_main.o): In function `ai_start_phase': /home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:588: undefined reference to `ai_do_first_activities' ./.libs/libcivserver.a(stdinhand.o): In function `debug_command': /home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:2382: undefined reference to `TIMING_RESULTS' /home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:2376: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:2417: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:2348: undefined reference to `CITY_LOG' ./.libs/libcivserver.a(stdinhand.o): In function `toggle_ai_player_direct': /home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:732: undefined reference to `assess_danger_player' ./.libs/libcivserver.a(unittools.o): In function `compare_units': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2392: undefined reference to `get_defender' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2393: undefined reference to `get_defender' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2394: undefined reference to `unit_win_chance' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2395: undefined reference to `unit_win_chance' ./.libs/libcivserver.a(unittools.o): In function `server_remove_unit': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1459: undefined reference to `vision_free' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1436: undefined reference to `ai_unit_new_role' ./.libs/libcivserver.a(unittools.o): In function `do_explore': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2149: undefined reference to `ai_manage_explorer' ./.libs/libcivserver.a(unittools.o): In function `enemies_at': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1057: undefined reference to `unit_def_rating_basic_sq' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1066: undefined reference to `can_unit_attack_unit_at_tile' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1066: undefined reference to `can_unit_attack_all_at_tile' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1069: undefined reference to `unit_att_rating' ./.libs/libcivserver.a(unittools.o): In function `unit_versus_unit': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:179: undefined reference to `get_total_attack_power' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:180: undefined reference to `get_total_defense_power' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:183: undefined reference to `get_modified_firepower' ./.libs/libcivserver.a(unittools.o): In function `update_unit_activity': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:773: undefined reference to `ai_incident_pillage' ./.libs/libcivserver.a(unittools.o): In function `create_unit_full': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1398: undefined reference to `vision_new' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1410: undefined reference to `aiferry_init_ferry' ./.libs/libcivserver.a(unittools.o): In function `find_a_good_partisan_spot': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:970: undefined reference to `get_virtual_defense_power' ./.libs/libcivserver.a(unittools.o): In function `unit_survive_autoattack': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2426: undefined reference to `can_unit_attack_unit_at_tile' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2443: undefined reference to `get_defender' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2444: undefined reference to `get_defender' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2445: undefined reference to `unit_win_chance' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2446: undefined reference to `unit_win_chance' ./.libs/libcivserver.a(unittools.o): In function `move_unit': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2755: undefined reference to `vision_new' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2775: undefined reference to `vision_free' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2890: undefined reference to `vision_free' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2792: undefined reference to `vision_new' ./.libs/libcivserver.a(unittools.o): In function `do_nuclear_explosion': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2100: undefined reference to `ai_incident_nuclear' ./.libs/libcivserver.a(unittools.o): In function `kill_unit': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1658: undefined reference to `is_stack_vulnerable' /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1658: undefined reference to `is_stack_vulnerable' ./.libs/libcivserver.a(unittools.o): In function `player_restore_units': /home/clint/tmp/freeciv/obj/server/../../server/unittools.c:387: undefined reference to `ai_follow_path' ./.libs/libcivserver.a(barbarian.o): In function `try_summon_barbarians': /home/clint/tmp/freeciv/obj/server/../../server/barbarian.c:479: undefined reference to `dist_nearest_city' ./.libs/libcivserver.a(citytools.o): In function `update_dumb_city': /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1898: undefined reference to `update_vision_site_from_city' /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1873: undefined reference to `create_vision_site_from_city' ./.libs/libcivserver.a(citytools.o): In function `remove_city': /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1197: undefined reference to `could_unit_move_to_tile' /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1277: undefined reference to `vision_free' ./.libs/libcivserver.a(citytools.o): In function `transfer_city': /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:875: undefined reference to `vision_new' /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:877: undefined reference to `vision_reveal_tiles' /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:879: undefined reference to `vision_get_sight' /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:879: undefined reference to `vision_get_sight' /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:999: undefined reference to `vision_free' ./.libs/libcivserver.a(citytools.o): In function `create_city': /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1086: undefined reference to `vision_new' /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1087: undefined reference to `vision_reveal_tiles' ./.libs/libcivserver.a(citytools.o): In function `reality_check_city': /home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1927: undefined reference to `free_vision_site' ./.libs/libcivserver.a(cityturn.o): In function `advisor_choose_build': /home/clint/tmp/freeciv/obj/server/../../server/cityturn.c:767: undefined reference to `ai_advisor_choose_building' ./.libs/libcivserver.a(cityturn.o): In function `auto_arrange_workers': /home/clint/tmp/freeciv/obj/server/../../server/cityturn.c:240: undefined reference to `TIMING_LOG' /home/clint/tmp/freeciv/obj/server/../../server/cityturn.c:324: undefined reference to `TIMING_LOG' /home/clint/tmp/freeciv/obj/server/../../server/cityturn.c:313: undefined reference to `CITY_LOG' ./.libs/libcivserver.a(diplhand.o): In function `really_diplomacy_cancel_meeting': /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:685: undefined reference to `clear_treaty' ./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_init_meeting_req': /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:728: undefined reference to `could_meet_with_player' /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:732: undefined reference to `init_treaty' ./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_create_clause_req': /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:631: undefined reference to `add_clause' /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:654: undefined reference to `ai_treaty_evaluate' ./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_remove_clause_req': /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:594: undefined reference to `remove_clause' /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:602: undefined reference to `ai_treaty_evaluate' ./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_accept_treaty_req': /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:554: undefined reference to `clear_treaty' /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:352: undefined reference to `ai_treaty_accepted' /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:349: undefined reference to `ai_treaty_accepted' ./.libs/libcivserver.a(diplhand.o): In function `free_treaties': /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:85: undefined reference to `clear_treaty' ./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_create_clause_req': /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:657: undefined reference to `ai_treaty_evaluate' ./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_remove_clause_req': /home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:605: undefined reference to `ai_treaty_evaluate' ./.libs/libcivserver.a(gotohand.o): In function `goto_is_sane': /home/clint/tmp/freeciv/obj/server/../../server/gotohand.c:593: undefined reference to `ai_channel' /home/clint/tmp/freeciv/obj/server/../../server/gotohand.c:585: undefined reference to `ai_channel' ./.libs/libcivserver.a(maphand.o): In function `change_playertile_site': /home/clint/tmp/freeciv/obj/server/../../server/maphand.c:812: undefined reference to `free_vision_site' ./.libs/libcivserver.a(maphand.o): In function `player_map_free': /home/clint/tmp/freeciv/obj/server/../../server/maphand.c:909: undefined reference to `free_vision_site' ./.libs/libcivserver.a(maphand.o): In function `map_claim_ownership': /home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1567: undefined reference to `update_vision_site_from_city' /home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1576: undefined reference to `create_vision_site_from_city' /home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1581: undefined reference to `create_vision_site_from_base' ./.libs/libcivserver.a(maphand.o): In function `really_give_tile_info_from_player_to_player': /home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1117: undefined reference to `create_vision_site' /home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1123: undefined reference to `copy_vision_site' ./.libs/libcivserver.a(ruleset.o): In function `load_ruleset_units': /home/clint/tmp/freeciv/obj/server/../../server/ruleset.c:1403: undefined reference to `update_simple_ai_types' ./.libs/libcivserver.a(ruleset.o): In function `load_rulesets': /home/clint/tmp/freeciv/obj/server/../../server/ruleset.c:3683: undefined reference to `unit_class_ai_init' ./.libs/libcivserver.a(savegame.o): In function `player_save_main': /home/clint/tmp/freeciv/obj/server/../../server/savegame.c:3163: undefined reference to `ai_data_get' ./.libs/libcivserver.a(savegame.o): In function `player_load_units': /home/clint/tmp/freeciv/obj/server/../../server/savegame.c:1888: undefined reference to `vision_new' ./.libs/libcivserver.a(savegame.o): In function `player_load_vision': /home/clint/tmp/freeciv/obj/server/../../server/savegame.c:3045: undefined reference to `create_vision_site' ./.libs/libcivserver.a(savegame.o): In function `game_load_internal': /home/clint/tmp/freeciv/obj/server/../../server/savegame.c:4751: undefined reference to `ai_manage_buildings' ./.libs/libcivserver.a(savegame.o): In function `player_load_main': /home/clint/tmp/freeciv/obj/server/../../server/savegame.c:1944: undefined reference to `ai_data_get' ./.libs/libcivserver.a(savegame.o): In function `player_load_cities': /home/clint/tmp/freeciv/obj/server/../../server/savegame.c:2834: undefined reference to `vision_new' /home/clint/tmp/freeciv/obj/server/../../server/savegame.c:2835: undefined reference to `vision_reveal_tiles' ./.libs/libcivserver.a(savegame.o): In function `apply_unit_ordering': /home/clint/tmp/freeciv/obj/server/../../server/savegame.c:3878: undefined reference to `unit_list_sort_ord_city' /home/clint/tmp/freeciv/obj/server/../../server/savegame.c:3884: undefined reference to `unit_list_sort_ord_map' ./.libs/libcivserver.a(settlers.o): In function `contemplate_new_city': /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1320: undefined reference to `find_best_city_placement' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1323: undefined reference to `CITY_LOG' ./.libs/libcivserver.a(settlers.o): In function `evaluate_improvements': /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:850: undefined reference to `UNIT_LOG' ./.libs/libcivserver.a(settlers.o): In function `contemplate_terrain_improvements': /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1351: undefined reference to `ai_data_get' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1378: undefined reference to `CITY_LOG' ./.libs/libcivserver.a(settlers.o): In function `auto_settler_findwork': /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:946: undefined reference to `ai_data_get' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1061: undefined reference to `ai_unit_new_role' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:977: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:978: undefined reference to `ai_unit_new_role' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1015: undefined reference to `TIMING_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1018: undefined reference to `TIMING_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1086: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1118: undefined reference to `ai_follow_path' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1023: undefined reference to `TIMING_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1024: undefined reference to `find_best_city_placement' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1025: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1027: undefined reference to `TIMING_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1050: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1053: undefined reference to `ai_unit_new_role' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:984: undefined reference to `ai_gothere' ./.libs/libcivserver.a(settlers.o): In function `ai_do_build_city': /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:86: undefined reference to `ai_unit_new_role' ./.libs/libcivserver.a(settlers.o): In function `auto_settler_findwork': /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:990: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:992: undefined reference to `ai_unit_new_role' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1030: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1041: undefined reference to `ai_unit_new_role' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1055: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1056: undefined reference to `ai_unit_new_role' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1073: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1003: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1034: undefined reference to `UNIT_LOG' /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1037: undefined reference to `print_cityresult' ./.libs/libcivserver.a(settlers.o): In function `ai_do_build_city': /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:114: undefined reference to `init_choice' ./.libs/libcivserver.a(settlers.o): In function `ai_manage_settler': /home/clint/tmp/freeciv/obj/server/../../server/settlers.c:144: undefined reference to `ai_unit_new_role' ./.libs/libcivserver.a(unithand.o): In function `handle_unit_orders': /home/clint/tmp/freeciv/obj/server/../../server/unithand.c:2023: undefined reference to `ai_unit_new_role' ./.libs/libcivserver.a(unithand.o): In function `unit_bombard': /home/clint/tmp/freeciv/obj/server/../../server/unithand.c:880: undefined reference to `is_unit_reachable_by_unit' ./.libs/libcivserver.a(unithand.o): In function `unit_move_handling': /home/clint/tmp/freeciv/obj/server/../../server/unithand.c:1286: undefined reference to `get_defender' /home/clint/tmp/freeciv/obj/server/../../server/unithand.c:1290: undefined reference to `can_unit_attack_all_at_tile' ./.libs/libcivserver.a(unithand.o): In function `unit_attack_handling': /home/clint/tmp/freeciv/obj/server/../../server/unithand.c:944: undefined reference to `sdi_try_defend' ./.libs/libcivserver.a(unithand.o): In function `handle_unit_change_activity': /home/clint/tmp/freeciv/obj/server/../../server/unithand.c:685: undefined reference to `ai_unit_new_role' ./.libs/libcivserver.a(unithand.o): In function `unit_change_homecity_handling': /home/clint/tmp/freeciv/obj/server/../../server/unithand.c:376: undefined reference to `vision_free' /home/clint/tmp/freeciv/obj/server/../../server/unithand.c:378: undefined reference to `ai_reinit' /home/clint/tmp/freeciv/obj/server/../../server/unithand.c:384: undefined reference to `vision_new' ./.libs/libcivserver.a(diplomats.o): In function `maybe_cause_incident': /home/clint/tmp/freeciv/obj/server/../../server/diplomats.c:1290: undefined reference to `ai_incident_diplomat' collect2: ld returned 1 exit status make[3]: *** [civserver] Error 1 make[3]: Leaving directory `/home/clint/tmp/freeciv/obj/server' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/clint/tmp/freeciv/obj/server' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/clint/tmp/freeciv/obj' make: *** [all] Error 2
What about something like
diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh
index 2769149..447d3a2 100644
--- a/libltdl/config/ltmain.m4sh
+++ b/libltdl/config/ltmain.m4sh
@@ -145,6 +145,7 @@ extracted_serial=0
opt_dry_run=false
opt_duplicate_deps=false
+opt_duplicate_deps_pedantically=false
opt_silent=false
opt_debug=:
@@ -320,6 +321,9 @@ func_enable_tag ()
--preserve-dup-deps)
opt_duplicate_deps=: ;;
+ --preserve-dup-deps-pedantically)
+ opt_duplicate_deps_pedantically=: ;;
+
--quiet|--silent) preserve_args="$preserve_args $opt"
opt_silent=:
opt_verbose=false
@@ -5725,16 +5729,18 @@ func_mode_link ()
eval tmp_libs=\"\$$var\"
new_libs=
for deplib in $tmp_libs; do
+ if $opt_preserve_dups_pedantically; then
# FIXME: Pedantically, this is the right thing to do, so
# that some nasty dependency loop isn't accidentally
# broken:
- #new_libs="$deplib $new_libs"
+ new_libs="$deplib $new_libs"
+ else
# Pragmatically, this seems to cause very few problems in
# practice:
- case $deplib in
- -L*) new_libs="$deplib $new_libs" ;;
- -R*) ;;
- *)
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
# And here is the reason: when a library appears more
# than once as an explicit dependence of a library, or
# is implicitly linked in more than once by the
@@ -5749,17 +5755,18 @@ func_mode_link ()
# such unportable linking tricks to link the library
# using -Wl,-lname, so that libtool does not consider it
# for duplicate removal.
- case " $specialdeplibs " in
- *" $deplib "*) new_libs="$deplib $new_libs" ;;
- *)
- case " $new_libs " in
- *" $deplib "*) ;;
- *) new_libs="$deplib $new_libs" ;;
- esac
- ;;
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
esac
- ;;
- esac
+ fi
done
tmp_libs=
for deplib in $new_libs; do
* Clint Adams wrote on Fri, Dec 19, 2008 at 04:28:21AM CET: Well, that would reall mean that upstream should rather change the semantics of --preserve-dup-deps, no? What keeps you from using -Wl,-lname? Thanks, Ralf [...]
I do not know. It requires gcc, can't be pointed at .la files, and would mean setting a bunch of -L paths?
Hi all, Resurrecting an old bug dating back to 2008, still present in current libtool 2.4.6-14. We've recently encountered that bug with the inn2 package. The --preserve-dup-deps does not do what it is supposed to do because of a broken optimization (marked as FIXME in the libtool code). Suggestion of patch:--- ltmain.sh.orig 2020-11-21 08:16:10.480694237 +0100 +++ ltmain.sh 2020-11-21 08:43:00.848365987 +0100 @@ -8686,41 +8686,45 @@ eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; + if $opt_preserve_dup_deps; then + # Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken. + new_libs="$deplib $new_libs" + else + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. And if not possible for portability + # reasons, then --preserve-dup-deps should be used. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + fi done tmp_libs= for deplib in $new_libs; do Works OK witn inn2.
Hi all, https://savannah.gnu.org/patch/?9999 Related commits: https://github.com/autotools-mirror/libtool/commit/752e2f33294067037fc861262925b883accf37ce https://github.com/autotools-mirror/libtool/commit/938a0f4b01375fa14dde37f51be7761887dd684e It will normally be present in the next libtool release (probably v2.5.1).